Я использую php ZipArchive для создания zip-файла каталога. Код работает отлично для почти всех каталогов, кроме двух, которые являются самыми большими (самый большой каталог в настоящее время содержит 51 файл с общим объемом 175 МБ). Когда я запускаю код для этих каталогов, временный файл ('filename.zip. [RandomLettersAndNumbers]', например 'filename.zip.riaab4') будет создан с размером 67 108864 байт, и скрипт выдает внутреннюю ошибку сервера (500).PHP: Ошибка (500) при создании zip-файла с ZipArchive
То, что я пытался до сих пор (большинство из них до сих пор видны в источнике):
- Увеличение
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 {
}
Я что-то упустил? Если есть что-то еще, я могу попробовать, пожалуйста, дайте мне знать. Благодарю.
EDIT: У меня есть более конкретный вопрос: почему временные zip-файлы затронутых каталогов имеют размер файла 67,108,864 байт? Связано ли это с максимальным размером файла, установленным php/сервером, или это можно объяснить стандартом zip-стандарта/ZipArchive?
Apache или Nginx? Я думаю, PHP работает, но потому что сервер не дождался, когда PHP будет выполнен - вы увидите ошибку 500 – KoIIIeY
, так что проверьте ошибку сервера, а не PHP – KoIIIeY
Я пользуюсь услугами веб-хостинга, поэтому у меня нет доступа к реальной сети сервер. Журнал ошибок сервера пуст (кроме некоторых несвязанных ошибок «Преждевременный конец скриптовых заголовков»). В соответствии с обслуживанием клиентов максимальный размер файла отсутствует (можно заархивировать каталог на моем локальном компьютере, загрузить zip-файл на сервере) и максимальное время выполнения. – MatthewS