Hallo an Alle,
Gleich vorweg ich bin ein PHP-Script noob und Suche mir meine Problemlösungen aus dem Internet zusammen. Jetzt nach 2 Tagen suchen und Probieren brauch ich wirklich Hilfe.
Folgendes: Ich habe ein Script gefunden mit dem ich eine einzele Datei und/oder den gesamten Inhalt eines Verzeichnisses Zippen kann.
Jetzt die Frage wie müsste der Code geändert werden, wenn ich verschiedene Unterordner auf einmal zippen möchte?
hier die Codes:
zip.lib.php
DeepDir.php
zippen.php
In einem abwasch zippen möchte die Ordner "Hauptordner/Uordner/UU1" und z.B. "Hauptordner/Uordner/UU3".
Dank euch schonmal
Gleich vorweg ich bin ein PHP-Script noob und Suche mir meine Problemlösungen aus dem Internet zusammen. Jetzt nach 2 Tagen suchen und Probieren brauch ich wirklich Hilfe.
Folgendes: Ich habe ein Script gefunden mit dem ich eine einzele Datei und/oder den gesamten Inhalt eines Verzeichnisses Zippen kann.
Jetzt die Frage wie müsste der Code geändert werden, wenn ich verschiedene Unterordner auf einmal zippen möchte?
hier die Codes:
zip.lib.php
DeepDir.php
PHP-Code:
<?php
//=========================================================
// class "DeepDir" take files from all nested directories
// Using:
//
// $dirName = '..';
// $dir = new DeepDir();
// $dir->setDir( $dirName );
// $dir->load();
// foreach( $dir->files as $pathToFile ){
// echo $pathToFile."\n";
// }
//
class DeepDir{
var $dir;
var $files;
function DeepDir(){
$this->dir = '';
$this->files = array();
$this->dirFILO = new FILO();
}
function setDir( $dir ){
$this->dir = $dir;
$this->files = array();
$this->dirFILO->zero();
$this->dirFILO->push( $this->dir );
}
function load(){
while( $this->curDir = $this->dirFILO->pop() ){
$this->loadFromCurDir();
}
}
function loadFromCurDir(){
if ( $handle = @opendir( $this->curDir ) ){
while ( false !== ( $file = readdir( $handle ) ) ){
if ( $file == "." || $file == ".." ) continue;
$filePath = $this->curDir . '/' . $file;
$fileType = filetype( $filePath );
if ( $fileType == 'dir' ){
$this->dirFILO->push( $filePath );
continue;
}
$this->files[] = $filePath;
}
closedir( $handle );
}
else{
echo 'error open dir "'.$this->curDir.'"';
}
}
} // end class
//================================
// stack: First In Last Out
//
class FILO{
var $elements;
function FILO(){
$this->zero();
}
function push( $elm ){
array_push( $this->elements, $elm );
}
function pop(){
return array_pop( $this->elements );
}
function zero(){
$this->elements = array();
}
} // end class FILO
?>
PHP-Code:
<?php
// Hier einzele Dateien eintragen
// $zip_datei = "index.html";
// Verzeichnispfad eintragen (Inhalt des "Uordner" wird gezippt, Ordnerstruktur bleibt erhalten!)
$zip_ordner = "Hauptordner/Uordner";
// Startet den Buffer, sodass keine Header-Fehlermeldungen entstehen.
ob_start();
// Läd die Zip-Library
require("zip.lib.php");
// Erstellt eine neue Zipdatei
$zipfile = new zipfile("Test.zip");
// Fügt die Classe DeepDir.php ein .
require_once( 'DeepDir.php' );
$dirName = "$zip_ordner";
$dir = new DeepDir();
$dir->setDir( $dirName );
$dir->load();
foreach( $dir->files as $n => $pathToFile ){
$zipfile->addFileAndRead("$pathToFile");
}
// Wenn einzelne Dateien oben eingetragen werden dann die untere Zeile aktivieren
// $zipfile->addFileAndRead("$zip_datei");
// Gibt die Zip-Datei aus.
echo $zipfile->file();
?>
In einem abwasch zippen möchte die Ordner "Hauptordner/Uordner/UU1" und z.B. "Hauptordner/Uordner/UU3".
Dank euch schonmal
Kommentar