tar.gz entpacken
TobiasBuschi
- php
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
你好 TobiasBuschi,
Ein Skript das ich gefunden habe jedoch nicht korrekt funktioniert:
[...]
Und was spricht dagegen, PEAR zu benutzen?
再见,
克里斯蒂安
Ein Skript das ich gefunden habe jedoch nicht korrekt funktioniert:
[...]Und was spricht dagegen, PEAR zu benutzen?
Ich weiss nicht, habe mich noch nicht gross mit PEAR beschäftigt, sind die PEAR Bibliotheken standardmässig bereits verfügbar oder muss man sie mit includes verfügbar machen?
Wenn ja wie kann ich erfahren welche PEAR Bibliothken und in welcher Version verfügbar sind?
你好 TobiasBuschi,
Ein Skript das ich gefunden habe jedoch nicht korrekt funktioniert:
[...]Und was spricht dagegen, PEAR zu benutzen?
Ich weiss nicht, habe mich noch nicht gross mit PEAR beschäftigt, sind
die PEAR Bibliotheken standardmässig bereits verfügbar oder muss man
sie mit includes verfügbar machen?
Die PEAR-Bibliotheken sind seit irgeneiner fruehen 4er-Version automagisch
mitinstalliert. Du musst halt die richtigen Klassen einbinden, lies doch
einfach mal http://pear.php.net/.
Wenn ja wie kann ich erfahren welche PEAR Bibliothken und in welcher
Version verfügbar sind?
http://pear.php.net/
Die Klasse, die du brauchst, ist immer dabei, die wird von PEAR selbst
benoetigt.
再见,
克里斯蒂安
einfach mal http://pear.php.net/.
Danke, mach ich
Hallo Christian,
Die PEAR-Bibliotheken sind seit irgeneiner fruehen 4er-Version automagisch
mitinstalliert. Du musst halt die richtigen Klassen einbinden, lies doch
einfach mal http://pear.php.net/.
vielen herzlichen Dank an dich!
So etwas wie PEAR habe ich schon immer gesucht, vor allem wegen den Funktionen die man im Netzwerk-Bereich findet (whois, traceroute und ping inklusive):
http://pear.php.net/manual/en/package.networking.php
Da habe ich das Schlagwort "PEAR" schon so oft gehört und habe es mir als besonders schwer vorgestellt, doch der Dokumentation zufolge ist es das gar nicht.
Auf die Plätze, fertig, PEAR! ;-)
Grüße
Marc Reichelt || http://www.marcreichelt.de/