PHP загрузка / потоковый файл в браузер — ошибка максимального времени ожидания выполнения

Ситуация: мы храним файлы на Amazon S3 и записываем информацию в нашу базу данных. Теперь пользователь может загружать файлы по ссылке для скачивания, например www.myserver.de/downloadFile?id=1234.

Это работает довольно хорошо, но мы получаем несколько ошибок «Превышено максимальное время выполнения 800 секунд».

Наш текущий код для скачивания:

    header("Pragma: public");
header("Expires: -1");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

if($mimeType)
{
header("Content-Type: ".$mimeType);
}
else
{
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$filename.";");
}

header("Content-length: ".$filesize);

$s3Client = new s3Client();
//download the file from s3 to local server
$s3Client->getFile($folder, $filename, $tempFolder.$filename);

$filehandle = fopen($tempFolder.$filename, "rb");
while(!feof($filehandle))
{
print(@fread($filehandle, 1024*8));
ob_flush();
flush();
if(connection_status() != 0)
{
@fclose($filehandle);
unlink($tempFolder.$filename);
exit;
}
}

@fclose($filehandle);
unlink($tempFolder.$filename);
exit;

Ошибка максимального времени выполнения происходит даже с очень маленькими файлами (всего несколько КБ). Похоже, что есть проблема в цикле, и это не будет завершено?

Странная вещь: загрузка все равно работает?

Когда в нашем журнале появляется ошибка тайм-аута, мы сами пытаемся загрузить файл, и он работает отлично.

Источник для этого способа загрузки файлов: http://www.media-division.com/the-right-way-to-handle-file-downloads-in-php/

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]