Я давно пишу веб-приложение, и у меня возникли некоторые проблемы с обслуживанием изображений.
Мой код извлекает данные файла с сервера, используя file_get_contents
и использует Слима Request
объекты write
метод для вывода содержимого файла, установка заголовков, как он идет. Для большинства файлов это работает, однако на больших изображениях часто отображается только серый контур размеров изображения (протестировано в мобильных и настольных системах Chrome). Запрашивает ошибку с ERR_SPDY_PROTOCOL_ERROR
Это заставило меня поверить, что это проблема HTTP 2 (сервер, на котором я тестирую, прослушивает соединения HTTP 2, установлен с listen [port] http2
директива в его конфигурации nginx), однако я попытался понизить версию HTTP, используемую в ответе с PSR-7 RequestInterface
«s withProtocolVersion
метод и ничего не изменилось.
Я знаю, используя file_get_contents
затем вывод указанного содержимого является очень окольным способом, но я знаю, что это единственный способ разрешить пользователям этого приложения произвольно устанавливать местоположение загружаемых файлов.
Это самая важная часть моего кода, где $filepath
путь к файлу, запрошенному пользователем. Этот код работает, как и ожидалось, для всех файлов, кроме больших изображений.
return $response->withHeader('Content-Type', mime_content_type($filepath))->write(file_get_contents($filepath));
Я решил это с помощью Guzzle’s LazyOpenStream
учебный класс. Кажется, теперь работает безупречно!
Редактировать: Итак, хотя изначально это не сработало, оказалось, что некоторые права доступа к файлам были испорчены nginx
конец, так как я изменил пользователя —nginx
больше не владел своим каталогом кеша FastCGI. К счастью, это было исправлено, и все, кажется, работает.
Протип если ты в моей ситуации рСвинец Tон Frackin’ LOGS!
Других решений пока нет …