Problems addind a note to the fopen manual page.
| From: | Josep Sanz | Date: | Sat, 18 Jun 2011 08:32:59 +0000 |
| Subject: | Problems addind a note to the fopen manual page. | ||
| Groups: | php.webmaster | ||
| Request: | Send a blank email to php-webmaster+get-11225@lists.php.net to get a copy of this message | ||
I'm trying to add a note with this content to the
fopen manual page. The note,
solves some problems of the untar function that
was added by other contributor
to the notes section at a few months.
My problem is that the note never appear to the
fopen manual page and I
understand that this note it's interest for the
other users that try to use the
untar function with files that contain empty files
and files with long
filenames.
I post here the original note:
Fixed 2 issues:
- Support for long filenames
$FileName="././@LonkLink"
- Fixed the untar of files with $FileSize=0
<?php
// PHP iUnTAR Version 3.0
// license: Revised BSD license
function untar($tarfile,$outdir="./",$chmod=null)
{
$TarSize = filesize($tarfile);
$TarSizeEnd = $TarSize - 1024;
if($outdir!=""&&!file_exists($outdir)) {
mkdir($outdir,0777); }
$thandle = fopen($tarfile, "r");
while (ftell($thandle)<$TarSizeEnd) {
$FileName =
$outdir.trim(fread($thandle,100));
$FileMode =
trim(fread($thandle,8));
if($chmod===null) {
$FileCHMOD =
octdec("0".substr($FileMode,-3)); }
if($chmod!==null) {
$FileCHMOD =
$chmod; }
$OwnerID = trim(fread($thandle,8));
$GroupID = trim(fread($thandle,8));
$FileSize =
octdec(trim(fread($thandle,12)));
$LastEdit =
trim(fread($thandle,12));
$Checksum =
trim(fread($thandle,8));
$FileType =
trim(fread($thandle,1));
$LinkedFile =
trim(fread($thandle,100));
fseek($thandle,255,SEEK_CUR);
// LongLink support added by Josep
Sanz
if($FileName=="././@LongLink" ||
$FileType=="L") {
$FileName =
$outdir.trim(fread($thandle,$FileSize));
fseek($thandle,512-$FileSize,SEEK_CUR);
fseek($thandle,100,SEEK_CUR);
$FileMode =
trim(fread($thandle,8));
if($chmod===null) {
$FileCHMOD
= octdec("0".substr($FileMode,-3)); }
if($chmod!==null) {
$FileCHMOD
= $chmod; }
$OwnerID =
trim(fread($thandle,8));
$GroupID =
trim(fread($thandle,8));
$FileSize =
octdec(trim(fread($thandle,12)));
$LastEdit =
trim(fread($thandle,12));
$Checksum =
trim(fread($thandle,8));
$FileType =
trim(fread($thandle,1));
$LinkedFile =
trim(fread($thandle,100));
fseek($thandle,255,SEEK_CUR);
}
if($FileType=="0") {
// Empty files support
added by Josep Sanz
if($FileSize==0)
$FileContent = "";
else
$FileContent =
fread($thandle,$FileSize); }
if($FileType=="1") {
$FileContent =
null; }
if($FileType=="2") {
$FileContent =
null; }
if($FileType=="5") {
$FileContent =
null; }
if($FileType=="0") {
$subhandle =
fopen($FileName, "a+");
fwrite($subhandle,$FileContent,$FileSize);
fclose($subhandle);
chmod($FileName,$FileCHMOD); }
if($FileType=="1") {
link($FileName,$LinkedFile); }
if($FileType=="2") {
symlink($LinkedFile,$FileName); }
if($FileType=="5") {
mkdir($FileName,$FileCHMOD); }
//touch($FileName,$LastEdit);
if($FileType=="0") {
// Empty files support
added by Josep Sanz
if($FileSize>0) {
$CheckSize = 512;
while
($CheckSize<$FileSize) {
if($CheckSize<$FileSize) {
$CheckSize = $CheckSize + 512; } }
$SeekSize =
$CheckSize - $FileSize;
fseek($thandle,$SeekSize,SEEK_CUR); } } }
fclose($thandle);
return true; }
?>
Thanks.
Josep.
--
Josep Sanz Campderrós
The SaltOS & RhinOS projects
http://www.saltos.net