Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 5 File Formats
  gp 5.1 Contact_Vcard_Build
  gp 5.2 Contact_Vcard_Parse
  gp 5.3 MP3_ID
  gp 5.4 Archive_Tar
  gp 5.5 File_Passwd
    gp 5.5.1 Grundsätzliche Funktionsweise
    gp 5.5.2 .htpasswd-Dateien
    gp 5.5.3 Unix-User verwalten
    gp 5.5.4 Samba-Passwort-Dateien
    gp 5.5.5 CVS-Passwort-Dateien
  gp 5.6 File_HtAccess
  gp 5.7 Spreadsheet_Excel_Writer
    gp 5.7.1 Arbeitsblätter
    gp 5.7.2 Tabellenfelder
    gp 5.7.3 Drucken
  gp 5.8 File_PDF


Rheinwerk Computing

5.4 Archive_Tar  toptop


Besprochene Version: 1.2 Lizenz: PHP-Lizenz
Klassendatei(en): Archive/Tar.php

Die Klasse Archive_Tar ermöglicht es Ihnen, Tar-Archive, auch Tar-Balls genannt, neu zu erstellen oder die Daten aus einem bestehenden Archiv zu extrahieren. Hierbei handelt es sich nicht um ein Komprimieren, sondern nur um ein »Zusammenfassen« der Daten. Meist werden Tar-Archive aber noch zusätzlich im gzip- (Dateiendung .gz bzw. .tgz) oder bzip2-Format (Dateiendung .bz2) komprimiert, um Speicherplatz zu sparen. Das Paket unterstützt beide Kompressionsverfahren, wobei diese in der PHP-Installation vorhanden sein müssen.

Leider überprüft das Paket nicht alle Eventualitäten, wenn ein Zugriff auf Dateien erfolgt. So fängt das Paket beispielsweise nicht ab, wenn eine Datei, die archiviert werden soll, nicht gelesen werden kann o. Ä. Sie sollten also selbst sicherstellen, dass Ihr Programm auf dem Server über alle notwendigen Leserechte verfügt. Sollten die Schreibrechte fehlen, so dass ein Archiv nicht angelegt werden kann, bemerkt das Paket das.

Die Nutzung des Pakets gestaltet sich recht einfach. Nachdem Sie die Datei Archive/Tar.php eingebunden haben, können Sie ein neues Objekt instanziieren. Der Konstruktor bekommt den Namen der Archivdatei übergeben, mit der gearbeitet werden soll. Existiert die Datei nicht, wird sie neu angelegt. Eine bestehende Datei wird geöffnet. Als zweiten Parameter können Sie angeben, ob das Archiv komprimiert werden soll. Geben Sie "gz" an, wird das Archiv im gzip-Format komprimiert, wohingegen die Angabe von "bz2" eine Kompression im bzip2-Format forciert. Möchten Sie beispielsweise alle Dateien, die in einem Unterverzeichnis namens daten liegen, archivieren und die resultierende Datei komprimieren, könnte das so aussehen:

require_once("Archive/Tar.php"); 
 
// neues Archiv erzeugen 
$my_arc=new Archive_Tar("backup.tar.gz","gz"); 
// create bekommt den Namen des zu 
// komprimierenden Verzeichnisses uebergeben 
$my_arc->create("daten");

Der Dateiname, der dem Konstruktor übergeben wird, benötigt den vollen Dateinamen inklusive etwaiger Pfad-Angaben und Datei-Suffixe. Sollte ein Fehler bei der Ableitung des Objekts auftreten, weil z. B. eine Erweiterung zum Komprimieren der Daten nicht gefunden wird, bricht das Programm mit einer Fehlermeldung ab.

Die Methode create() bekommt den Namen eines Verzeichnisses, einer Datei als String oder die Namen von mehreren Verzeichnissen und/oder Dateien in Form eines Arrays übergeben. Mithilfe eines booleschen Werts, den sie zurückgibt, teilt sie mit, ob die Operation erfolgreich war. Wenn bereits eine (Archiv-) Datei unter dem Namen bestehen sollte, so wird diese überschrieben. Daher könnte es sinnvoll sein, dass Sie – bevor Sie die Datei überschreiben – mit file_exists() prüfen, ob der Dateiname bereits genutzt wird.

Ein wenig mehr Flexibilität bietet createModify(). Sie akzeptiert zwei weitere Parameter. Nach dem bzw. den Namen der Dateien oder Verzeichnisse, die hinzugefügt werden sollen, folgt der Name eines Verzeichnisses, in das die Daten eingefügt werden sollen. Beim Entpacken der Daten landen die archivierten Daten dann also in dem Unterverzeichnis, dessen Name hier angegeben wurde.

Möchten Sie Daten zu einem bestehenden Archiv hinzufügen, können Sie auf die Methode add() zurückgreifen. Bezüglich der Parameter verhält sie sich wie create(), nur überschreibt sie ein bestehendes Archiv nicht, sondern fügt die übergebenen Dateien hinzu. Sollte das Archiv noch nicht existieren, wird es automatisch angelegt. Auch hier gibt es wieder eine etwas leistungsfähigere Möglichkeit in Form von addModify(), das sich wie createModify() verhält.

Interessant ist auch die Methode addString(). Sie eröffnet Ihnen die Möglichkeit, eine Datei »on the fly« in das Archiv zu integrieren. Das heißt, dass Sie einen beliebigen String direkt als Text-Datei im Archiv ablegen können.

require_once("Archive/Tar.php"); 
 
// neues Archiv erzeugen 
$my_arc=new Archive_Tar("backup.tar.gz","gz"); 
$my_arc->addString ("daten","Peter Sausewind");

In diesem Beispiel würde das komprimierte Archiv backup.tar.gz eine Datei namens daten enthalten. In dieser Datei ist dann der Text Peter Sausewind enthalten, wenn das Archiv wieder entpackt wird. Diese Methode kann wirklich sehr hilfreich sein, wenn Sie beispielsweise Daten aus einer Datenbank ausgelesen haben und diese in einem Archiv ablegen wollen.

Natürlich kann das Paket nicht nur packen, sondern auch entpacken. Um den Inhalt eines Pakets auszugeben, steht Ihnen die Methode listContents() zur Verfügung. Sie liefert ein Array zurück, in dem für jede einzelne Datei ein weiteres Array vorgesehen ist. Bei diesem verschachtelten Array handelt es sich um ein assoziatives Array. Die wichtigsten Schlüssel des Arrays finden Sie in Tabelle 5.3.


Tabelle 5.3 Die wichtigsten Array-Schlüssel
Schlüssel Erläuterung
filename Name der Datei oder des Directorys inklusive eines eventuellen Pfades
uid User-ID des ursprünglichen Eigentümers
gid Gruppen-ID des ursprünglichen Eigentümers
size Größe der Datei in Byte (bei Verzeichnissen 0)
mtime Zeitstempel der Datei

Um ein Archiv zu entpacken, ist die Methode extract() vorgesehen, die die Daten so wiederherstellt, wie es im Archiv vorgesehen ist. Sie legt also alle Dateien und Unterverzeichnisse entsprechend der Vorgaben an oder überschreibt bereits existierende Dateien. Sie können der Methode zusätzlich den Namen eines Directorys übergeben, in das die Daten entpackt werden sollen. Auch diese Methode gibt ein false zurück, wenn ein Fehler auftreten sollte.

Teilweise weisen die Dateien, die in einem Tar-Ball zusammengefasst sind, eine recht tiefe Verzeichnisstruktur auf. Das heißt, eine Datei daten.dat wurde beim Erstellen des Archivs beispielsweise direkt aus dem Unterverzeichnis public_html/daten/backup ausgelesen. Beim Entpacken würde der komplette Pfad wieder hergestellt, was sehr störend sein kann. Möchten Sie das verhindern, können Sie die Daten mit extractModify() entpacken. Diese Methode akzeptiert noch einen zweiten Parameter, mit dem Sie den Pfad angeben können, der entfernt werden soll. Mit

$my_arc->extractModify("restore","public_html/daten/backup");

würden die Daten aus dem Archiv in das Verzeichnis restore entpackt, und der Pfad public_html/daten/backup würde automatisch entfernt.

Eine letzte sehr hilfreiche Methode beim Extrahieren von Daten ist extractInString(). Ähnlich wie bei addString() ermöglicht Ihnen diese Methode, Daten direkt in einen String zu übernehmen. Die Methode bekommt den Namen einer Datei übergeben, die in dem Archiv enthalten ist. Diese Datei wird entpackt, und ihr Inhalt wird als String zurückgegeben. Die Zeile

$datei=$my_arc->extractInString("daten.dat");

würde also die Datei daten.dat entpacken und die dort enthaltenen Daten als String in der Variable $datei ablegen.

 <<   zurück
     
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: PHP PEAR
PHP PEAR
Jetzt Buch bestellen!
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Rheinwerk-Shop: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Rheinwerk-Shop: MySQL 5.6






 MySQL 5.6


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern