字节顺序标记BOM由PHP-FPM生成

问题描述

我有一个PHP脚本,用于响应http查询提供jpeg图像。

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流带有BOM表前缀-浏览器将其视为无效的jpeg

我还尝试使用wget保存查询响应,并且可以将BOM表作为响应正文的前3个字节(在标头之后)。

如果我绕过脚本直接获取jpeg,一切正常。

我对BOM_在ob_end_flush()的缓冲区中不存在感到满意-(我向ob_start临时添加一个过滤器以检查缓冲区)

因此PHP-fpm出于某种原因似乎正在添加BOM。 PHP-fpm错误日志中没有任何内容

可能是什么原因造成的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)