PHP不能使用 header 进行 301 跳转

看到一个段PHP代码做跳转的时候是输出的 javascript 而没有使用 header(‘Location: xxx’) ,于是将其改为了 header(‘Location: xxx’)。

结果不能正常跳转,显示空白,监控 http 请求发现,即使在我设置完 header 完之后直接 exit 的情况下,服务器端仍然输出了 3bit 的字符。

于是开始找是哪输出的这 3bit ,从入口的 index.php 直到设置 header 的地方都没有任何输出。。。

最后只能用 exit 从 index.php 入口处一句一句代码的中断调试,追踪到引入 config 文件的时候发现这 3bit 的输出是从 config 文件中输出的。

打开 config 通读代码却没有发现任何输出语句,百思不得其解。。。

后来突然想到会不会是字符编码的问题,因为PHP会将文件的 bom 信息输出,PHP在有内容输出后又不能设置 header ,因此导致 header 函数无效?

查看该文件编码 utf8格式 ,印象中3年前搭建项目的时候应该全站源码都是 utf8无bom 格式。于是修改文件编码格式,问题解决。

这种莫名其妙的Bug其实只要开发的同学细心点就能避免的。

1年前一个同学遇到这个问题的时候问过我,因为我已离职,没有全面的检查代码就没有能解决。

没想到今年回来后,这个问题还是由我来解决了。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注