周梦康 发表于 2014-03-29 2672 次浏览

因为在文档中,官方不停地强调header()之前不能有输出,但是实际测试发现,有空格或者输出在header()之前,程序照样正常执行!

代码如下:

<?php
echo "222";
header('Location: http://zhoumengkang.com/');

正常执行,没发现有什么问题。下面的在输出之后,输出之后,然后刷新缓冲区,就会出错了。

<?php
echo "222";
ob_flush();
flush();
header('Location: http://zhoumengkang.com/');

出错,输出如下:

222
Warning: Cannot modify header information - headers already sent by (output started at /usr/html/test.php:3) in /usr/html/test.php on line 5

原因是为何呢?可能和php的配置和浏览器的缓冲机制都有关吧。

之前在csdn上提问过关于session的问题:http://bbs.csdn.net/topics/390684404

还有一个关于浏览器缓冲区的问题:http://bbs.csdn.net/topics/390473130

关于这个问题还可以参考这个:http://segmentfault.com/q/1010000000377390

关于HTTP头先发的问题,的确不应该在HTTP内容输出之后输出HTTP头。但是服务器会缓存输出,虽然你使用了echo或者print,但在那个时刻服务器还没有将这些内容作为HTTP报文输出,这个时候你仍然有机会修改HTTP头。

评论列表