使用ZipArchive创建zip文件时出现PHP错误(500)

5
我正在使用php的ZipArchive类来创建一个文件夹的zip文件。代码对于几乎所有的文件夹都可以正常工作,但有两个文件夹除外,这恰巧是最大的文件夹(目前最大的文件夹包含51个文件,总共175MB)。当我运行这些文件夹的代码时,一个临时文件(“filename.zip.[随机字母和数字]”,例如“filename.zip.riaab4”)会被创建,大小为67108864字节,并且脚本会抛出内部服务器错误(500)。
到目前为止我尝试过以下方法(其中大部分仍然可见于源代码):
  • 增加memory_limit
  • 增加max_execution_time
  • 检查php错误日志:错误日志为空
  • 尝试找出发生错误的确切位置:代码执行到$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类来解释?


Apache还是Nginx?我认为,PHP工作,但是因为服务器不等待PHP完成 - 所以你看到了错误500。 - KoIIIeY
因此,请检查服务器错误,而不是 PHP。 - KoIIIeY
我正在使用Web托管服务,因此我无法访问实际的Web服务器。服务器错误日志为空(除了一些不相关的“脚本头部过早结束”错误)。根据客户服务的说法,没有最大文件大小限制(可以在本地计算机上压缩目录并将zip文件上传到服务器),也没有最大执行时间限制。 - MatthewS
exec创建了一个大小为67,108,864字节(64 MB)的zip文件,可能已损坏。是否可以确定最大文件大小是由php还是Web服务器设置确定的?memory_limit已设置为512M(本地值)/ 128M(主值)。 - MatthewS
尝试这个 - https://dev59.com/FmMm5IYBdhLWcg3wKskj - KoIIIeY
显示剩余3条评论
1个回答

0

在每添加5个文件到ZIP归档文件后,尝试关闭ZIP归档文件并重新打开它。我认为这个解决方案可以解决内存限制问题。

感谢MatthewS提供的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接