hallo allerseits,
Ich suche schon einige zeit nach einer Möglichkeit, ein tar.gz Archiv mit PHP zu entpacken.
Ich weiss dass es bei PEAR eine Möglichkeit gibt und dass dies mit Kommandobefehlen zu lösen wäre, ich suche jedoch nach einem möglichst kleinen Skript, das ich in eine Datei integrieren kann die zur Installation des eigentlichen Tools dient.
Ein Skript das ich gefunden habe jedoch nicht korrekt funktioniert:
-----------------------------------------------------
class compress_tar
{
var $fp = 0;
var $filename = '';
function compress_tar($file)
{
$this->file = &$file;
$this->open($file);
}
function extract($dst)
{
while ($buffer = gzread($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_ary[] = "$dst$filename";
}
else if (dirname($filename) != '.')
{
$mkdir_alt_ary[] = $dst . dirname($filename);
}
}
}
$mkdir_alt_ary = array_unique($mkdir_alt_ary);
// Create the directory structure
if (sizeof($mkdir_ary) || sizeof($mkdir_alt_ary))
{
if (!sizeof($mkdir_ary) && sizeof($mkdir_alt_ary))
{
$mkdir_ary = $mkdir_alt_ary;
unset($mkdir_alt_ary);
}
sort($mkdir_ary);
foreach ($mkdir_ary as $dir)
{
if (!mkdir($dir, 0777))
{
trigger_error("Could not create directory $dir");
}
@chmod("$dir", 0777);
}
}
fseek($this->fp, 0);
// Write out the files
$size = 0;
while ($buffer = gzread($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 == 0 || $filetype == "\0")
{
$tmp = unpack("A12size", substr($buffer, 124, 12));
$filesize = octdec((int) trim($tmp['size']));
if (!($fp = fopen("$dst$filename", 'wb')))
{
trigger_error("Could create file $filename");
}
@chmod("$dst$filename", 0777);
$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()
{
gzclose($this->fp);
}
function open($file)
{
return $this->fp = @gzopen($this->file, 'r');
}
}
-----------------------------------------------------------
Danke für die Mühe