我正在使用phps ZipArchive类来创建目录的zip文件.代码适用于几乎所有目录,除了两个,这恰好是最大的目录(最大的目录目前包含51个文件,总共175MB).当我运行这些目录的代码时,将创建一个临时文件('filename.zip.[RandomLettersAndNumbers]',例如'filename.zip.riaab4'),大小为67,108,864字节,脚本会抛出内部服务器错误(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 '
'; var_dump($zip_archive->close()); // ## The following lines are not executed!! ## echo '
'; var_dump($zip_archive->getStatusString()); echo '
'; //Temporary (debugging) END if($zip_archive->numFiles > 0 && $zip_archive->close() == true) $FILE = $ZIP; else { }
我错过了什么吗?如果还有什么我可以试试请告诉我.谢谢.
编辑:我有一个更具体的问题:为什么受影响目录的临时zip文件都有67,108,864字节的文件大小?这与php /服务器设置的最大文件大小有关,还是可以用zip标准/ ZipArchive类解释?