Das Problem besteht darin, dass ZipArchive die Dateien beim Abschluss nicht zu schließen scheint.
Was ich am Ende haben möchte, sind drei ZIP-Dateien wie diese:
Code: Select all
Package1.zip
Package2.zip
Package3.zip
Code: Select all
Package1.zip.a012341
Package1.zip.b012342
Package2.zip.a023451
Package2.zip.b023452
Package3.zip.a034561
Package3.zip.b034562
Ich vermute, dass ich in php.ini oder auf meinem Webserver/IIS eine Einstellung ändern muss. Die Dateien, die ich zu erstellen versuche, sind ziemlich groß, irgendwo zwischen 450 und 600 MB.
Das ist meine beste Vermutung, weil ich zwei fast identische Server-Setups habe, auf denen ich den gleichen Code ausprobiert habe. Bei einem von ihnen funktioniert es perfekt, bei dem anderen jedoch nicht. Das beweist, dass mein ZipArchive-Code hier nicht das Problem sein kann (ich habe die Server übrigens nicht eingerichtet, daher bin ich mir nicht sicher, was der Unterschied ist).
Ich habe versucht, das Memory_Limit und die Ausführungszeit in meiner php.ini zu erhöhen. Bei letzterem handelte es sich um ein früheres Problem und ich erhielt eine Meldung, dass die Zeit abgelaufen sei.
Bearbeiten: Die Funktion wurde hinzugefügt.
Code: Select all
function package_site($filepath, &$context) {
$context['message'] = 'Creating package';
// Mac app
$mac_zipfile = 'public://site_export/mac_package.zip';
copy_directory($mac_zipfile, $filepath . '/mac_package.zip', '/.*/');
$files = file_scan_directory($filepath . '/files', '/.*/');
$mac_zip = new ZipArchive();
if($mac_zip->open(drupal_realpath($filepath . '/mac_package.zip')) === true) {
foreach($files as $key => $value) {
$mac_zip->addFile(drupal_realpath($value->uri), 'mac_package.app/Contents/Resources/' . substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
}
} else {
drupal_set_message("Could NOT open mac_package.zip");
}
$mac_zip->close();
// PC app
drupal_unlink($filepath . '/package.zip');
$start_files_path_pc = 'public://site_export/pc_files';
copy_directory($start_files_path_pc, $filepath . '/files', '/.*/');
$pc_files = file_scan_directory($filepath . '/files', '/.*/');
$zip = new ZipArchive();
$res = $zip->open(drupal_realpath($filepath . '/package.zip'), ZipArchive::CREATE);
if ($res === TRUE) {
foreach ($pc_files as $key => $value) {
$zip->addFile(drupal_realpath($value->uri), substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
}
$zip->close();
}
// Create a html package
create_pure_html_package($filepath);
// HTML package
drupal_unlink($filepath . '/html.zip');
$html_files = file_scan_directory($filepath . '/files/site', '/.*/');
$zip_html = new ZipArchive();
$res = $zip_html->open(drupal_realpath($filepath . '/html.zip'), ZipArchive::CREATE);
if ($res === TRUE) {
foreach ($html_files as $key => $value) {
$zip_html->addFile(drupal_realpath($value->uri), substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
}
$zip_html->addFile(drupal_realpath($filepath . '/start.html'), 'start.html');
$zip_html->close();
}
rrmdir(drupal_realpath($filepath . '/files'));
unlink(drupal_realpath($filepath . '/start.html'));
}
Mobile version