mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
Extraction of .tar, .tar.gz and .tar.bz2
git-svn-id: file:///svn/phpbb/trunk@4308 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
760bf9dbb2
commit
71cc8e79b3
1 changed files with 44 additions and 0 deletions
|
@ -241,6 +241,49 @@ class compress_tar extends compress
|
||||||
function extract($dst)
|
function extract($dst)
|
||||||
{
|
{
|
||||||
$fzread = ($this->isbz && function_exists('bzread')) ? 'bzread' : (($this->isgz && extension_loaded('zlib')) ? 'gzread' : 'fread');
|
$fzread = ($this->isbz && function_exists('bzread')) ? 'bzread' : (($this->isgz && extension_loaded('zlib')) ? 'gzread' : 'fread');
|
||||||
|
|
||||||
|
$header = $data = '';
|
||||||
|
$size = 0;
|
||||||
|
while ($buffer = $fzread($this->fp, 512))
|
||||||
|
{
|
||||||
|
$tmp = unpack("A6magic", substr($buffer, 257, 6));
|
||||||
|
|
||||||
|
if (trim($tmp['magic']) == 'ustar')
|
||||||
|
{
|
||||||
|
$tmp = unpack("A100name", $buffer);
|
||||||
|
$filename = trim($tmp['name']);
|
||||||
|
|
||||||
|
$tmp = unpack("Atype", substr($buffer, 156, 1));
|
||||||
|
$filetype = (int) trim($tmp['type']);
|
||||||
|
|
||||||
|
if ($filetype == 5)
|
||||||
|
{
|
||||||
|
mkdir($dst . $filename);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$tmp = unpack("A12size", substr($buffer, 124, 12));
|
||||||
|
$filesize = octdec((int) trim($tmp['size']));
|
||||||
|
|
||||||
|
if (!($fp = fopen($dst . $filename, 'wb')))
|
||||||
|
{
|
||||||
|
trigger_error('Could not open file for output');
|
||||||
|
}
|
||||||
|
|
||||||
|
$size = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$size += 512;
|
||||||
|
$length = ($size > $filesize) ? 512 - ($size - $filesize) : 512;
|
||||||
|
|
||||||
|
$tmp = unpack("A512data", $buffer);
|
||||||
|
|
||||||
|
fwrite($fp, (string) $tmp['data'], $length);
|
||||||
|
unset($buffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function close()
|
function close()
|
||||||
|
@ -290,6 +333,7 @@ class compress_tar extends compress
|
||||||
$fzwrite($this->fp, pack("a512", $buffer));
|
$fzwrite($this->fp, pack("a512", $buffer));
|
||||||
$i += 512;
|
$i += 512;
|
||||||
}
|
}
|
||||||
|
unset($data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue