#php #byte-order-mark #fpm
#php #метка порядка байтов #fpm
Вопрос:
У меня есть PHP-скрипт, который обрабатывает изображение в формате jpeg в ответ на http-запрос.
ob_start();
header('HTTP/1.1 200 OK');
header('Cache-Control: no-cache, must-revalidate'); // don't want any caching
header('Content-Type: image/jpeg');
header("Content-Length: $len");
readfile($fn);
ob_end_flush();
Этот скрипт отлично работает с Apache mod-php7 (Ubuntu 16.04), но тот же сценарий с Apache и PHP-FPM (Ubuntu 20.04) приводит к тому, что поток jpeg имеет префикс спецификации, который браузер видит как недопустимый jpeg.
Я также попытался сохранить ответ на запрос с помощью wget, и я вижу спецификацию как первые 3 байта тела ответа после заголовков.
Если я получу jpeg напрямую, минуя мой скрипт, все будет в порядке.
Я удовлетворен тем, что спецификация ОТСУТСТВУЕТ в буфере в ob_end_flush() — (я временно добавил фильтр в ob_start для проверки буфера)
Похоже, что php-fpm по какой-то причине добавляет спецификацию. В журнале ошибок php-fpm ничего нет.
Что может быть причиной этого?
Комментарии:
1. Спецификация может находиться в самом
.php
файле сценария перед<?php
тегом2. Спасибо. Я проверил это с помощью hexdump. Спецификации нет.