Кажется, у меня проблема с загрузкой файлов. Мои журналы показывают ошибку «Превышено максимальное время выполнения 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, но она не всегда одна и та же.
Спасибо за помощь! 🙂
Почему все это 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);
Других решений пока нет …