PHP File Download — Максимальное время выполнения происходит случайно

Кажется, у меня проблема с загрузкой файлов. Мои журналы показывают ошибку «Превышено максимальное время выполнения 60 секунд», но запрошенный файл — это всего лишь маленький CSS-файл с объемом всего 1,64 КБ. Так что доставка не должна занимать 60 секунд, и, к сожалению, ошибка не совсем воспроизводима. Если я открываю URL, он работает отлично, но мой журнал ошибок показывает ошибки (случайные?) На других клиентах несколько раз. Есть ли ошибка в моем коде?

// this code is from: http://www.richnetapps.com/the-right-way-to-handle-file-downloads-in-php/
// fix for IE catching or PHP bug issue
header("Pragma: public");
header("Expires: -1"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); // browser must download file from server instead of cache
if(substr($filename, -4) == ".css")
{
$mimeType = "text/css";
}
header("Content-Type: ".$mimeType);
header("Content-length: ".$filesize);

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

Строка ошибки всегда находится внутри цикла while, но она не всегда одна и та же.

Спасибо за помощь! 🙂

0

Решение

Почему все это OB возиться за простой вывод CSS? Я уверен, что именно эта проверка состояния соединения иногда приводит к зависанию вашего запроса.

if(connection_status() != 0)  // that specifically

Зачем тебе это вообще нужно? Вы можете просто сделать

header("Pragma: public");
header("Expires: -1"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: text/css");
header("Content-length: ".$filesize);
readfile($filename);
1

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

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

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