aptik
@aptik

При нескольких одновременых вызовах скрипта некоторые запросы выдают пустую страницу. Что не так?

Есть PHP скрипт:
/*
...
достаем нужный путь к файлу из базы по информации с реквеста
$name = 'етот путь';
...
*/

$fp = fopen($name, 'rb');
header('Pragma: public');
header('Cache-Control: max-age=86400');
header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + 86400));
header("Content-Type: image");
header("Content-Length: " . filesize($name));
fpassthru($fp);
exit;

Мой .htaccess файл перенаправляет все запросы типа image/c0b7fbb39f425760b61eab96f53fee5a_53d7b7b513a9d.png в этот скрипт, который в свою очередь по хешу достает нужный путь и отдает содержимое файла изображения.
Все работает как задумано. Но в ситуации когда на одной странице есть много таких картинок то некоторые из них не показываються. Вместо того чтоб получить картинку получаю вот такой ответ с пустым телом:
Remote Address:x.x.x.x:80
Request URL:http://...image/c0b7fbb39f425760b61eab96f53fee5a_53d7b7b513a9d.png
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:ru,en-US;q=0.8,en;q=0.6,uk;q=0.4
Connection:keep-alive
Cookie:PHPSESSID=7o1ouvllm0smad14s952dh5fq1; yii-debug-toolbar=hide; _ga=GA1.2.281170268.1406016085
Host:host.com
Referer:http://.../images
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36

Проблема явно не в самих файлах, так как после загрузки такой страницы картинки которые не показывались могут совершенно нормально показаться, а в свою очередь картинки с которыми не было проблем, могут не показаться.

Ubuntu 14.04.1 LTS
Apache/2.4.7
PHP 5.5.9-1ubuntu4.3 (модуль апача)


UPD:
Перенес вопрос в /tmp так как проблема была в другом. В картинки пробирался YiiDebugToolbar. Пришлось его отключать динамически для этого контроллера.
  • Вопрос задан
  • 2454 просмотра
Пригласить эксперта
Ответы на вопрос 4
Случайно в php-скрипта привязки к сессии нет?
Ответ написан
merryjane
@merryjane
Системный администратор
Покажите вывод команды:
apachectl -M
Ответ написан
akubintsev
@akubintsev
Опытный backend разработчик
Можно посмотреть логи apache access + error.
Подумал ещё про нехватку воркеров в apache, но вроде как 200-й код статуса...
Ответ написан
lexxpavlov
@lexxpavlov
Программист, преподаватель
В ошибочном ответе нет ваших хедеров, которые задаются скриптом. Может быть, что-то вызывает ошибку, начинается отдача контента, и хедеры уже не отправляются.
Я так понял, до указанного кода есть другой код?
Это скрипт на простом php, вне yii?
Сколько файлов в вашей папке с изображениями?
Напишите первой строчкой скрипта (если ещё нет такой строчки):
ob_start();
И скажите, начнут ли появляться ваши хедеры в браузере в этих ошибочных загрузках.
Перед fpassthru добавьте ещё
ob_end_clean();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы