簡體   English   中英

PHP:使用ZipArchive創建zip文件時出錯(500)

[英]PHP: Error (500) when creating a zip file with ZipArchive

我正在使用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 '<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類解釋?

嘗試關閉ZIP存檔並在每5個左右的文件添加到存檔后重新打開它。 我假設此解決方案解決了內存限制問題。

感謝MatthewS提供此解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM