BinaryFileResponse некорректно работает в Firefox — изображение повреждено или усечено

#php #apache #symfony #firefox #symfony-http-foundation

#php #apache #symfony #firefox #symfony-http-foundation

Вопрос:

Я сталкиваюсь с некоторыми странными проблемами, когда Firefox пытается загрузить файлы изображений, созданные PHP. Происходит на Mac и Windows (7, 8, 10).

Консоль Firefox говорит:

Изображение повреждено или усечено.

В Chrome, Safari и IE / Edge все работает нормально.

Но это не постоянная ошибка, иногда одни и те же изображения загружаются полностью или, по крайней мере, частично в Firefox.

Статические изображения, обслуживаемые непосредственно Apache, также работают без каких-либо проблем.

Код на стороне сервера довольно простой и выглядит следующим образом:

 $response = new BinaryFileResponse($file->getPathname());

return $response;
  

Вот заголовок необработанного ответа статических (рабочих) изображений:

 Connection: close
Date: Thu, 20 Oct 2016 11:55:04 GMT
Etag: "1ab1567-d2e0-53f396a39fd2e"
Server: Apache
Vary: User-Agent
  

Вот одно из изображений, сгенерированных PHP:

 Accept-Ranges: bytes
Cache-Control: max-age=1209600, public, s-maxage=1209600
Connection: close
Content-Encoding: gzip
Content-Type: image/jpeg
Date: Thu, 20 Oct 2016 11:57:45 GMT
Last-Modified: Thu, 20 Oct 2016 10:12:05 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Accept-Encoding,User-Agent
  

Следует упомянуть одну вещь, я использую один и тот же скрипт примерно на 30 веб-сайтах без каких-либо проблем. Так что, возможно, это проблема на стороне сервера?

Комментарии:

1. Попробуйте добавить длину содержимого к заголовкам

2. Я попробовал это с $response->headers->set('Content-Length', filesize($file->getPathname())); , но заголовки ответов не изменились. Я также заметил, что Firefox и Chrome оба получают Transfer-Encoding: chunked, в то время как Safari получает «Identity».

Ответ №1:

В моем случае причиной был установленный плагин AdBlock Plus в Firefox 😉

Комментарии:

1. Я больше не работаю в этой компании, но, насколько я помню, это было именно так 😉 Не уверен, что я когда-либо находил решение.