| SPL - Die Standard PHP Library - Backup Basis Script |
|
Seite 5 von 7
Die Kernfunktion unseres Datei-Backup ScriptsOk zugegeben, das mit den 7 Zeilen war nicht leicht zu erraten, weil dazu eine weitere Iterator Klasse erforderlich ist die wir uns noch gar nicht angeschaut haben. Ebenso wurde auch noch nicht erwähnt das man Objekte einer Iterator Klasse beim Instanziieren einer anderen Iterator Klasse an diese übergeben kann, was den Umgang mit den Klassen wesentlich erleichtert und Schreibarbeit spart. Das Listing des Backup Scripts zum erzeugen einer Zip Datei einer verschachtelten Verzeichnisstruktur: $verzeichnis = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( 'testdateien/' ), true ); $zip = new ZipArchive; $resource = $zip->open( 'backup.zip', ZipArchive::CREATE ); if ($resource === TRUE) { foreach ( $verzeichnis as $datei ) { $zip->addFile( $datei, $datei ); } } $zip->close(); Im Prinzip ist das ganze Listing weitestgehend identisch mit dem Zip-Archiv Beispiel von eben. Einzig die erste Zeile ist etwas anders im Vergleich zu den vorherigen Beispielen, aber hier geschieht die eigentliche Arbeit. Aufgrund der Länge der Zeile habe ich sie umgebrochen um sie übersichtlicher zu machen. Werfen wir mal einen genaueren Blick darauf... $verzeichnis = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( 'testdateien/' ), true ); Die innere Instanziierung der RecursiveDirectoryIterator Klasse ist nicht neu, das hatten wir weiter oben schon unter die Lupe genommen. Was hier jetzt aber neu ist, ist die Klasse RecursiveIteratorIterator der, bei dessen Instanziierung, das Object der RecursiveDirectoryIterator Klasse übergeben wird.
Das True beim Aufruf könnte man in diesem Fall auch weg lassen, da es für das erstellen der Zip-Datei nicht erforderlich ist. Wird beim Aufruf True angegeben, wird auch der Name des Kindes (Unterverzeichnis) ausgegeben. Das kann nützlich und sinnvoll sein wenn z.B. eine Ordnerstruktur auf dem Screen ausgeben werden soll. Schon beeindruckend wie einfach man so ein kleines Backup Script schreiben kann. Allerdings ist die Arbeitsweise doch etwas unbefriedigend. Das Script würde nämlich gnadenlos alles in die Zip-Datei packen was ihr auf dem Weg bei der rekursiven Iteration über den Weg läuft. Wirklich sinnvolle Backups kann man aber eigentlich nur dann machen, wenn wir bestimmte Dateien ausklammern könnten (z.B. htaccess Dateien, Log-Files, usw.) oder nur bestimmte Dateien in's Backup aufnehmen. |