Метка порядка байтов (спецификация), генерируемая PHP-FPM

#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. Спецификации нет.