TobiasBuschi: tar.gz entpacken

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

  1. 你好 TobiasBuschi,

    Ein Skript das ich gefunden habe jedoch nicht korrekt funktioniert:
    [...]

    Und was spricht dagegen, PEAR zu benutzen?

    再见,
    克里斯蒂安

    --
    89,7% aller Statistiken sind frei erfunden!
    1. 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?

      1. 你好 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.

        再见,
        克里斯蒂安

        --
        Das Sein entsteht aus dem Nicht-Sein.
        1. einfach mal http://pear.php.net/.

          Danke, mach ich

        2. 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/

          --
          Linux is like a wigwam - no windows, no gates and an Apache inside!
          Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
          http://emmanuel.dammerer.at/selfcode.html