Teil von  SELFPHP
Professional CronJob-Service

Suche

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP?
In über 130.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 
 
Grundlegende Informationen

Am Ende der Seite finden Sie das komplette Beispiel als Download.


Die Sicherung von Dateien und ganzen Verzeichnissen sollte für Sie mindestens genauso wichtig sein wie Ihr Internetprojekt selbst. Über die Sicherung von Dateien, Verzeichnissen, Datenbanken oder Email-Postfächern machen sich viele erst dann Gedanken, wenn es zu spät ist. Dabei ist die Erstellung von komprimierten oder archivierten Dateien gerade am Shell-Prompt spielend einfach.

Allerdings ist es notwendig, dass Sie den Unterschied zwischen einer komprimierten und einer archivierten Datei kennen. Bei einer archivierten Datei handelt es sich um eine Ansammlung von Dateien und Verzeichnissen, die in die Archivdatei geschrieben wird.

Die Größe der Archivdatei entspricht dabei exakt der Größe aller in ihr gespeicherten Dateien. Bei einer komprimierten Datei werden im Gegensatz zu einer Archivdatei alle in ihr befindlichen Dateien komprimiert. Somit beansprucht diese komprimierte Datei weniger Platz als alle in ihr befindlichen Dateien.

Sie fragen sich jetzt sicherlich, wofür Sie dann eigentlich eine Archivdatei benötigen. Die Antwort ist recht simpel. Zuerst erstellen Sie eine Archivdatei (TAR) mit allen Dateien und Verzeichnissen, um sie dann letztendlich mit Gzip oder Bzip zu komprimieren.

Bevorzugt sollten Sie die Komprimierungstools Bzip2 und Gzip für die Komprimierung nutzen, da sie auf den meisten Unix-Betriebssystemen vorhanden sind. Wollen Sie hingegen die komprimierte Datei zu einem Windows-Betriebssystem übertragen, bietet sich hierfür das Komprimierungstool Zip an.

Achten Sie unbedingt immer darauf, dass Sie Befehle, die Sie über die Shell ausführen, mit escapeshellcmd() maskieren. Sie gehen ein sehr hohes Risiko ein, wenn Sie darauf verzichten, da dann willkürliche Befehle durch Benutzereingaben ausgeführt werden können. In dem hier dargestellten Beispiel wurde auf diesen Schutz verzichtet, da dem Skript keine Benutzereingaben übergeben werden.

Außerdem konnten dadurch einige Schritte eingespart werden. Das folgende Beispiel würde nicht funktionieren, wenn es zuvor mit espaceshellcmd() maskiert worden wäre:

$shellBefehl = "tar cvf $tarName $implodeFiles && gzip $tarName";
exec($shellBefehl,$var);

Nach der Maskierung hätte unser Beispiel folgendermaßen ausgesehen:

$shellBefehl = "tar cvf $tarName $implodeFiles \&\& gzip $tarName";

Dieses hätte zur Folge gehabt, dass zwar die Archivdatei erstellt worden wäre, aber keine komprimierte Datei. Sie hätten bei einer Maskierung mit espaceshellcmd() die beiden Befehle voneinander trennen müssen.

$shellBefehl = "tar cvf $tarName $implodeFiles";
$shellBefehl_1 = "gzip $tarName";
exec($shellBefehl,$var);
exec($shellBefehl_1,$var_1);

Eine Maskierung mittels espaceshellcmd() bei unserem Beispiel, in dem nur *.sqlDateien komprimiert werden sollen, wird auch so nicht funktionieren:

$files[] = ’testordnerSQL/*.sql’;

Nach der Maskierung wäre unser Sternchen(*) maskiert, und die Aufgabe könnte nicht erfüllt werden.

$files[] = ’testordnerSQL/\*.sql’;

Sie sollten sich also bewusst sein, wann Sie etwas mit espaceshellcmd() maskieren und wann nicht. Ein Skript, das keine Benutzereingaben übernimmt und vielleicht hinter einen Verzeichnisschutz liegt (z. B. htaccess), ist relativ sicher. Auch erreicht man eine enorme Sicherheit, indem alle übergebenen Variablen überprüft werden.

Achten Sie im Vorfeld darauf, wie Sie den Pfad zu einer Datei oder zu einem Verzeichnis angeben – das Ergebnis wird je nachdem, wie Sie den Pfad setzen, ein anderes sein. Nehmen wir an, Ihr PHP-Skript zum Komprimieren der Dateien liegt im Verzeichnis

/home/user/htdocs/

und Sie möchten die Dateien und das Verzeichnis

/home/user/htdocs/datei1.txt
/home/user/htdocs/datei2.txt
/home/user/htdocs/datei3.txt
/home/user/htdocs/verzeichnis1

komprimieren. Wenn Sie den absoluten Pfad (/home/user/htdocs) vor den Dateio- der Verzeichnisnamen setzen, werden die Verzeichnisnamen und auch ihre Tiefe mit in die Archivdatei gespeichert. Je nachdem, was Sie mit der Archivierung bezwecken, sollten Sie entweder den absoluten oder relativen Pfad setzen.

Bei den folgenden Beispielen wurden insgesamt acht Dateien (reine Textdateien) und zwei Verzeichnisse komprimiert. Anhand der folgenden Tabelle 8.1 können Sie ablesen, wie weit jeweils die möglichen Methoden die Dateien komprimieren konnten. Gerade bei der Komprimierung von Textfiles bietet sich Bzip2 wegen der blockweisen Komprimierung an – anhand der Tabelle sehen Sie den enormen Unterschied zu den anderen Methoden.

Komprimierungstool   Ursprungsgröße aller Dateien   Komprimierungsgröße aller Dateien   %
Gzip   ca. 880 kb   30.55 kb   96.53
Bzip2   ca. 880 kb   9.53 kb   98.91
Zip   ca. 880 kb   29.70 kb   96.63
Tabelle 8.1: Unterschiedliche Komprimierungen

Zu den Beispielen in diesem Kapitel

Es kann passieren, dass nach Ausführen des Skripts keine Datei erstellt wurde. Dies liegt dann wahrscheinlich daran, dass die erforderlichen Rechte für das Verzeichnis in dem das Skript ausgeführt wurde, nicht richtig gesetzt sind und angepasst werden müssen. Sie müssen dann die Rechte für das Verzeichnis mit Ihrem FTP-Programm folgendermaßen neu setzen:

o+rwx
  • r Leserechte
  • w Schreibrechte
  • x Recht zum Ausführen



Abbildung 8.1: Rechte




Zurück zur Übersichtsseite


 




:: Premium-Partner ::

Webhosting/Serverlösungen

Pixel X weitere Premium-Partner
 

:: SELFPHP Sponsor ::

Zend Technologies GmbH weitere Sponsoren
 


:: Buchempfehlung ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Webhosting/Serverlösungen

Suchen Sie den für Sie passenden IT-Dienstleister für Ihr Webhosting-Paket oder Ihre Serverlösung?

Sie sind nur ein paar Klicks davon entfernt!


 

Ausgewählter Tipp im Bereich PHP-Skripte


Dateien/Verzeichnisse mit Bzip2 komprimieren

Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte
 

SELFPHP Code Snippet


Datenbank-Backup mit automatischem FTP-Upload

Weitere interessante Code Snippets finden Sie auf SELFPHP im Bereich PHP Code Snippets
 
© 2001-2024 E-Mail SELFPHP Inh. Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005-2024 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de