我正在使用phps ZipArchive类来创建目录的zip文件。代码适用于几乎所有目录,除了两个,这恰好是最大的目录(最大的目录目前包含51个文件,总共175MB)。当我运行这些目录的代码时,将创建一个临时文件('filename.zip。[RandomLettersAndNumbers]',例如'filename.zip.riaab4'),大小为67,108,864字节,脚本会抛出内部服务器错误(500)。
到目前为止我已尝试过(大部分内容仍然在源代码中可见):
memory_limit
max_execution_time
$zip_archive->close();
来源:
//Temporary (debugging) START
ini_set("log_errors", 1);
ini_set("error_log", "php-error.log");
error_log("Hello errors.");
ini_set('memory_limit','512M');
set_time_limit(180);
//phpinfo();
//Temporary (debugging) END
//Get selected directory
// --> Code removed
$result['directory'] = 'directory1';
//Create .zip file
$zip_archive = new ZipArchive();
$ZIP = 'files/'.$result['directory'].'.zip';
if($zip_archive->open($ZIP, ZipArchive::CREATE | ZIPARCHIVE::OVERWRITE) !== TRUE) {
echo 'Error! Error while creating ZIP Archive.';
die;
}
foreach(new DirectoryIterator('files/'.$result['directory']) as $fileInfo) {
if($fileInfo->isDot())
continue;
if(file_exists($fileInfo->getPath()))
$zip_archive->addFile('files/'.$result['directory'].'/'.$fileInfo->getFilename(), $fileInfo->getFilename());
}
//Temporary (debugging) START
echo '<br><br><br>';
var_dump($zip_archive->close());
// ## The following lines are not executed!! ##
echo '<br><br><br>';
var_dump($zip_archive->getStatusString());
echo '<br><br><br>';
//Temporary (debugging) END
if($zip_archive->numFiles > 0 && $zip_archive->close() == true)
$FILE = $ZIP;
else {
}
我错过了什么吗?如果还有什么我可以尝试,请告诉我。感谢。
编辑:我有一个更具体的问题:为什么受影响目录的临时zip文件都有67,108,864字节的文件大小?这与php /服务器设置的最大文件大小有关,还是可以用zip标准/ ZipArchive类来解释?
答案 0 :(得分:0)
尝试关闭ZIP存档并在每5个左右的文件添加到存档后重新打开它。我认为这个解决方案解决了内存限制问题。
感谢MatthewS提供此解决方案。