Windows下开发的PHP验证码模块迁移到Linux中使用不了

DXCyber409 发布于 2016/10/13 17:10
阅读 431
收藏 0

PHP写的一个验证码模块,在Win环境下使用PhpStudy运行完全正常(apache+php5.4模式),迁移到CentOS中的lnmp环境下后(php-fpm + php5.4),验证码显示不出来

事情不简单,诡异的事现在开始。

之前以为是文件误带BOM了,然后用linux查找BOM,搜索了整个网站目录,无果grep --I -l $'^\xEF\xBB\xBF' ./。把验证码的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。

加载中
0
布尔值
布尔值

我只是来水的.

 得改php代码,明显是生成png文件但当成文本文件来输出流了

改用字节输出如:PNGCache.write(byte)

0
纯洁徐
纯洁徐
大小写问题?
0
梦想岛
梦想岛
编辑器最好用win和linux都有的软件。sublime,phpstorm。还有就是可以搜一下php removebom
0
DXCyber409
DXCyber409

引用来自“梦想岛”的评论

编辑器最好用win和linux都有的软件。sublime,phpstorm。还有就是可以搜一下php removebom

非常感谢,正所谓不识庐山真面目只缘身在此山中

BOM是存在的,不过不在PHP文件上,而在于诡异的前台js文件中,难怪找了那么久的PHP文件什么都找不到。

这次得到的教训是,任何文件的BOM都要移除,不仅仅是PHP文件

梦想岛
梦想岛
嗯,一般就是你在win的文件夹直接新建文件就会出现bom。建议使用编辑器来新建文件。
返回顶部
顶部