Windows下开发的PHP验证码模块迁移到Linux中使用不了
PHP写的一个验证码模块,在Win环境下使用PhpStudy运行完全正常(apache+php5.4模式),迁移到CentOS中的lnmp环境下后(php-fpm + php5.4),验证码显示不出来
事情不简单,诡异的事现在开始。
之前以为是文件误带BOM了,然后用linux查找BOM,搜索了整个网站目录,无果(grep -r -I -l $'^xEFxBBxBF' ./)。把验证码的PHP文件重新下到Win桌面上用16进制模式确认,也确实没有。
最后没办法只能逐字节比较。以下是Win环境生成的验证码(第一行),和Linux生成的(第二行),发现前三个字节明显就是BOM。
00000000h: 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 ; 塒NG........IHDR
00000000h: EF BB BF 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 ; 锘繅PNG........I
有没有什么好的办法解决这种LinuxPHP环境下产生的神奇BOM?
产生两个验证码的代码文件完全一致,仅运行的环境有区别,网站所有文件都已经排查了并不包含BOM。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
嗯,一般就是你在win的文件夹直接新建文件就会出现bom。建议使用编辑器来新建文件。
引用来自“梦想岛”的评论
编辑器最好用win和linux都有的软件。sublime,phpstorm。还有就是可以搜一下php removebom
编辑器最好用win和linux都有的软件。sublime,phpstorm。还有就是可以搜一下php removebom
大小写问题?
我只是来水的.
得改php代码,明显是生成png文件但当成文本文件来输出流了
改用字节输出如:PNGCache.write(byte)