Ich verwende diese Funktion zip-Dateien zu generieren.zip Erzeugungsfunktion zu erzeugen leere Dateien
function create_zip($files = array(),$destination = '',$overwrite = false) {
//if the zip file already exists and overwrite is false, return false
if(file_exists($destination) && !$overwrite) { return false; }
//vars
$valid_files = array();
//if files were passed in...
if(is_array($files)) {
//cycle through each file
foreach($files as $file) {
//make sure the file exists
if(file_exists($file)) {
$valid_files[] = $file;
}
}
}
//if we have good files...
if(count($valid_files)) {
//create the archive
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
//add the files
foreach($valid_files as $file) {
$zip->addFile($file,$file);
//echo $file;
}
//debug
//echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;
//close the zip -- done!
$zip->close();
//check to make sure the file exists
echo $destination;
return file_exists($destination);
}
else
{
return false;
}
}
ich dies mit einem Vanille-zip, unveränderte Wordpress installieren (http://wordpress.org/) jedoch Aus irgendeinem Grund hat der Ordner wp-content eine leere Datei, die mit seinem Namen generiert wurde. Der Ordner (und alles andere) selbst wird korrekt komprimiert, aber die meisten unzip-Anwendungen (einschließlich php's eigener extractTo()) brechen, wenn sie diese unerwünschte Datei aufgrund des Namenskonflikts erreichen.
Ich habe in der Ordner/Datei-Struktur untersucht und soweit ich sehen kann, ist der einzige Unterschied zwischen diesem und den anderen Ordnern auf der Seite, dass es der größte bei 5,86 MB ist.
Kann jemand einen Fix/Workaround vorschlagen?
Sie konnten die Zip-Funktion versuchen hier: http://stackoverflow.com/questions/1334613/how-to-recursively-zip-a-directory-in-php –
Hat das Array $-Dateien enthalten nur Dateien oder auch Verzeichnisse? Vielleicht möchten Sie 'is_file' zu Ihrer' file_exists' Prüfung hinzufügen. Und '$ zip-> addFile ($ file)' sollte ausreichen (belassen Sie den Parameter localname). – initall
Gibt es etwas im Fehlerprotokoll? – piotrekkr