Mit PEAR::Archive_Tar Tar-Archive behandeln


21.01.2003

Manchmal möchte man mit Tar-Archiven umgehen, z.B. ein neues Tar-Archiv erzeugen, Dateien aus einem Archiv extrahieren oder Ähnliches. PEAR bietet hier ein Package namens Archive_Tar, mit dem auch gezippte Tar-Archive behandelt werden können.

Installiert wird das Package mit dem Befehl pear install Archive_Tar, sofern es nicht schon bei Ihnen installiert ist. Damit - ein vorhandenes PEAR-Framework vorausgesetzt - ist es nun sehr einfach, ein neues Tar-Archiv zu erzeugen und die enthaltenen Daten auszugeben.

Wie üblich muss das Package erst einmal includiert werden:

include_once "Archive/Tar.php";

Danach erzeugt man ein Objekt, dessen Konstruktor man den Namen der (evtl. bereits vorhandenen Datei) übergibt. Im Beispiel möchte ich ein neues Tar-Archiv erzeugen, gebe also einen Tar-Namen an, der noch nicht existiert. Bitte beachten Sie, dass PHP bzw. der Webserver über die entsprechenden Rechte verfügen muss, im aktuellen (bzw. angegebenen) Verzeichnis schreiben zu dürfen.

$tar = new Archive_Tar("neues.tar");

Dem Konstruktor kann man alternativ noch als zweiten Parameter ein TRUE übergeben, damit erzeugt oder liest er mit GZIP gezippte Tar-Archive.

Das vorläufig noch leere Archiv muß nun erst einmal erzeugt werden, d.h. initial eine oder mehrere Dateien sollen in dieses Archiv eingetütet werden. Die geeignete Methode hierfür ist create, die ein einfaches Array mit einer Liste der Dateinamen übergeben bekommt.

$tar->create(array("ss_logo_120.jpg","rentawizard.gif"));

Nach Aufruf dieser Methode sollten nun im Tar zwei Dateien verfügbar sein.

Nun sollen dem Archiv weitere Dateien hinzugefügt werden. Dies bewerkstelligt man mit der Methode add, die als Parameter ebenfalls eine oder mehrere Dateien per Array übergeben bekommt, die hinzugefügt werden sollen.

$tar->add(array("jpgraph.php"));

Nun kann man auf der Konsole schon einmal überprüfen, ob denn tatsächlich auch diese drei Dateien im Tar-Archiv enthalten sind und ob das übliche Unix-Kommando tar diese erzeugte Datei auch lesen kann:

bjoern@mail:~ > tar tvf test.tar
-rw-r--r-- 500/100        7844 2001-10-25 08:55 ss_logo_120.jpg  
-rwxr--r-- 500/100        4617 2003-01-02 20:50 rentawizard.gif  
-rw-r--r-- 500/100        2811 2002-12-15 22:21 jpgraph_alpha.jpg

Diese Ausgabe kann man auch über eine Methode des Archive_Tar Packages machen. listContent() liefert ein Array mit den enthaltenen Dateiinfos oder aber 0, wenn keine Dateien enthalten sind. Mit einer kleinen if-Überprüfung und dem Auslesen der Array-Indizes "filename", "size", "mtime" (modified time, Unix Timestamp), und "uid"/"gid" kann man die relevanten Informationen auslesen. Weitere Indizes sind "mode" und "typeflag".

if ( ($file_list = $tar->ListContent()) != 0) {
    /**
    * Dateien sind enthalten
    */
    foreach ($file_list as $v) {
      printf("Name: %s  Size: %d   modtime: %s mode: %s
",
             $v["filename"],$v["size"],$v["mtime"],$v["mode"]);
    }
  }

Archive_Tar kennt noch weitere Methoden, u.a. extract. Ihr übergibt man ein Verzeichnis, in das der Inhalt des Tar- Archivs entpackt werden soll, oder einen leeren String, wenn das Tar-Archiv in das aktuelle Verzeichnis entpackt werden soll. Bitte beachten Sie auch hier, dass PHP resp. der Webserver die entsprechenden Schreibrechte haben muss. Existiert das angegebene Verzeichnis nicht, versucht Archive_Tar es neu zu erzeugen. $tar->extract("/tmp/Archive/");

Das komplette Script:

<?php
include_once 'Archive/Tar.php';

$tar = new Archive_Tar('./test.tar');

$tar->create(array('ss_logo_120.jpg','rentawizard.gif'));
$tar->add(array('jpgraph_alpha.jpg'));

if ( ($file_list = $tar->ListContent()) != 0) {
/**
* Dateien sind enthalten
*/
foreach& ($file_list as $v) {
printf("Name: %s  Size: %d   modtime: %s mode: %s<br>",
           $v['filename'],$v['size'],$v['mtime'],$v['mode']);
  }
}

$tar->extract('/tmp/Archive/');
?>


Kommentare

Bitte beachten Sie unsere Informationen zum Datenschutz.

blog comments powered by Disqus

Weitere Artikel zum Thema

  • MySQL 5.x – Der Schritt aufs Podest

    MySQL 5.x – Der Schritt aufs Podest

    Die offizielle Entwicklungsgeschichte von MySQL beginnt just in dem Jahr, als Michael Schumacher mit 92 Punkten erster deutscher Formel-1-Weltmeister wird – also präzise im Jahr 1994...

    weiterlesen
  • Datenströme in PHP mit php://stdin

    Datenströme in PHP mit php://stdin

    Wer PHP zur Programmierung von Konsolen-Applikationen verwenden möchte, steht sicherlich irgendwann einmal vor der Frage, wie er Inputströme so benutzen kann, dass er zum Beispiel den Inhalt einer eingehenden Mail analysieren kann...

    weiterlesen
  • Welcher Faktor ist für den Erfolg einer Website am wichtigsten?

    Welcher Faktor ist für den Erfolg einer Website am wichtigsten?

    Die jüngste Umfrage von Contentmanager.de beschäftigte sich mit der Frage, welcher Faktor für den Erfolg einer Website am wichtigsten ist. Design, Technik, Inhalt, Navigation und Community standen zur Auswahl...

    weiterlesen
  • MySQL im Vergleich zu anderen Datenbanken

    MySQL im Vergleich zu anderen Datenbanken

    MySQL hat in den vergangenen Jahren eine spürbare Verbreitung erlangt. Zum effektiven Umgang benötigen Sie ein Mindestmaß an Grundkenntnissen über die Beschaffenheit relationaler Datenbanken. Dazu mehr in diesem Magazinbeitrag...

    weiterlesen
  • Das Google Web Toolkit

    Das Google Web Toolkit

    Das GWT ist ein kostenloses, freies und unlängst vollständig unter eine Opensource-Lizenz gestelltes Toolkit zur Erstellung von AJAX-Appikationen mittels Java...

    weiterlesen
alle Artikel zum Thema

Autor

  • Björn Schotte

    Mayflower GmbH

Björn Schotte ist bekannt durch zahlreiche publizistische Tätigkeiten und seit 2002 Chefredakteur des PHP Magazins. 1999 war er Mitbegründer des PHP-Center, die mittlerweile größte deutschsprachige PHP-Ressource.




Unsere Experten


alle Experten

Premium Lösungen

Marktübersicht

Premium Services

Dienstleisterübersicht