这是前几周遇到的问题了,我在Linux下,一个同学在Windows下用UltraEdit。
我为某工程创建了一个PHP文件,工程文件都是UTF8的,这个文件也不例外。我在我的电脑上测试了这个文件,没有问题,然后就把这个文件传到SVN上了。
然后我同学下载了这个文件,不知为什么,他复制了这个文件的内容到剪贴板,然后用UltraEdit创建了一个文件,再从剪贴板把文件内容粘贴回去,保存。好,这回运行失败了,错误信息很典型,PHP默认情况下是关闭了输出缓冲的,所以偶在这个文件的第一行也写上了ob_start()来打开缓冲,这样在程序有了输出以后再想修改HTTP头也是可以的。但是现在不行了,第一行明明就是ob_start(),但是PHP就是报错,无法在输出内容以后再修改HTTP头信息。
太诡异了。
后来过了几天,终于发现这是UTF8编码的问题。UltraEdit创建的UTF8文件在文件开头会带有用来标识一个文件是UTF8编码的文件的几个字节(还是一个字节?偶忘记了),这几个字节是不会作为文件内容的,自然也不会在文本编辑器中显示出来。但是PHP在解析这个文件的时候,会首先输出这几个字节的UTF8编码标识,然后才执行ob_start(),显然这时候再缓冲也没用了,刚才的那几个字节已经作为普通的HTML内容发送给客户端了,于是就出现了内容已发送无法修改HTTP头的错误。
原因知道了,解决就简单了,在文本编辑器中去掉那个UTF标识字节就行了。
PHP文件诡异的缓冲问题
7 thoughts on “PHP文件诡异的缓冲问题”
F-22's Trace
greensea 的个人主页
sky-city
极夜奁
小樱之町
这个问题咱也遇到过,所以改用notepad++
反正你的标题就给人这种感觉
PIA!主语是文件,定语是PHP
唉?PHP是定语灭?
那只是给你的感觉而已
……
为啥题目不说微软利用垄断地位篡改标准,ultraedit被迫跟随,于是造成的诡异问题。
哎呀,因为偶不清楚这个UTF8 BOM的历史嘛
PIA!
这不素PHP的问题,而素编辑器的问题
N8年前就有了
不知道的童鞋请搜索请搜索utf8 bom
偶可没说PHP有问题,偶说的是PHP文件