Ошибка Bad Gateway 502 при попытке загрузить сгенерированный сервером ZIP-файл
При попытке загрузить сгенерированный сервером ZIP-файл выдается сообщение об ошибке 502.
Я выделил строку, которая вызывает ошибку; его:
$zip->addFile($thumb->loadVersion($version['id']), $rank . "_" . $thumb->filename);
Вот мой код Мой скрипт просматривает все загруженные пользователями файлы.jpg, объединяет их в один большой файл.zip и отправляет заголовки загрузки для файла.zip.
function downloadGalleryZip() {
$tmpfile = tempnam("tmp", "zip");
$zip = new ZipArchive();
$res = $zip->open($tmpfile, ZipArchive::OVERWRITE);
if ($res === TRUE) {
// loop through gallery
$sql = "SELECT * FROM files_versions WHERE file_id = ". $this->fileId . " AND deleted_on IS NULL ORDER BY rank ASC";
$result = db_query($sql);
$rank = 0;
while ($version = mysql_fetch_array($result)) :
$rank ++;
$rank = str_pad($rank, 3, '0', STR_PAD_LEFT);
$thumb = new fancyFile();
$zip->addFile($thumb->loadVersion($version['id']), $rank . "_" . $thumb->filename);
endwhile;
// $zip->addFromString('000_info.txt', 'Dieser Ordner wurde am ' . date("d.m.Y", time()) . ' heruntergeladen.');
$zip->close();
}
$filename = getCaptionFromFile($this->fileId) . ".zip";
header("Connection: Keep-Alive");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=" . $filename);
header("Content-Type: application/zip" );
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length:' . filesize($tmpfile));
ob_clean();
flush();
}
У меня нет абсолютно никакого опыта с "плохими ошибками шлюза", ваша помощь очень ценится!
Спасибо Мэтт
1 ответ
Решение
Я решил проблему.
Причиной было то, что создание zip-файла заняло более 5 секунд, а мой сервер шлюза имел значение Timeout и KeepAliveTimeout, равное 5 секундам. (вы можете отредактировать это в httpd.conf)
Я увеличил время ожидания до 60 секунд - проблема решена.