0

我写了一个 PHP 程序,我使用session_start()header()函数,我知道在向客户端发送任何东西之前我应该​​使用这个函数。没关系,但是为了测试,我echo "test";在使用 header() 之前向客户端发送了一条测试消息,但我没有收到任何错误,并且 header 函数可以正常工作!

此时在以前的 PHP 版本中,我会收到如下消息:

Warning: Cannot modify header information - headers already sent by (output started at /some/file.php:22) in /some/file.php on line 60

我想知道为什么我没有收到任何错误消息?!

我的 php 版本是 5.3.1 并且error_reportingE_ALL

4

3 回答 3

1

您看不到错误,因为
a. 输出缓冲开启
b。服务器会忽略您的 error_reporting 函数,因为其他东西会指示它以其他方式运行phpinfo();并查看它在那里所说的 aboutoutput buffering和 about error_reporting

于 2012-11-22T08:28:58.037 回答
0

这可能是因为您写入了一个输出缓冲区(ob_start),在您显式刷新缓冲区(ob_flush 或 ob_end_*)或脚本结束之前,它实际上不会向客户端返回任何内容。

在您开始编写 HTTP 响应的正文部分后,您无法发送标头这一事实不是 php,而是 HTTP 协议限制,因此这也不能是特定于版本的。

Zend Framework 等许多框架都使用输出缓冲区,因此开发人员无需关心顺序。

于 2012-11-22T08:55:20.447 回答
0

我发现了问题,我没有使用任何FrameWork。

问题是error_reporting('E_ALL');

我在我的第一个程序上编写了这段代码,所以 PHP 没有返回任何错误!我删除了这一行,我得到了错误!

这是在开玩笑,因为这一行对 PHP 说要显示所有错误!我不知道为什么 PHP 不显示任何错误。

于 2012-11-22T09:45:23.787 回答