本文讨论了如何彻底杜绝令人费解的错误警告:不能添加报头信息-报头已发送进来.
只要你写过PHP代码,相信你都遇到过这个最令人费解的警告.今天我们将修复它。.
阅读PHP手册,回答如下:
Message warning: Unable to send session cookie-header has been sent.
"Or the title information could not be added-the title has been sent.
函数header()、setcookie()和session需要向输出流添加头信息。但是报头信息只能在任何其他输出内容之前发送。在使用这些函数之前,不能有任何输出(比如HTML)。
函数headers_sent()可以检查你的脚本是否发送了头信息。参见输出控制功能。
不要有任何单词、空行、回车、空格等。在使用上述功能之前。但是.问题是答案并不令人满意。因为往往程序在其他PHP环境下都能正常运行。
首先:这个错误是怎么产生的?我们来看看PHP是如何处理HTTP头输出和体输出的。
当一个PHP脚本开始执行时,它可以发送头部信息和主体信息。标头信息(来自Header()或SetCookie()函数)不会立即发送;相反,它保存在一个列表中。
这允许您修改标题信息,包括默认标题(如内容类型标题)。但是,一旦脚本发送了任何无标题的输出(例如,使用HTML或print()调用),
那么PHP必须先发送所有的头,然后终止HTTP头。然后继续发送正文数据。从那时起,任何添加或修改标题信息的尝试都是不允许的,并且会发送上述错误消息之一。
好吧!那我们来解决一下:
愚蠢的方法:不要显示所有的错误警告!鸵鸟,具体方法就不说了_ #
解决方案:
1)适合有权限编辑PHP。INI的人
打开php。Ini文件(你应该比我更了解你的php。ini在哪里),找到它
Output_buffering=更改为on或任何数字。如果是IIS6,请改成ON,否则你的PHP效率会极慢。
2)使用虚拟主机,不能编辑PHP。INI,我们该怎么办?
简单:
在您的共享空间的根目录下创建一个。Htaccess文件,内容如下:
AllowOverride All PHP_FLAG output_buffering On
不幸的情况是:还是没有?网页不能全部显示吗?
然后,你可以给空间商打电话骂他,然后让他把阿帕奇的给你。Htaccess AllowOverride打开
3)在PHP文件中求解
Ob_start()启用输出缓冲机制。输出缓冲支持多个级别——例如,ob_start()函数可以被多次调用。
Ob_end_flush () sends the output buffer (output buffer) and disables the output buffer mechanism.
Ob_end_clean () clears the output buffer but does not send, and disables the output buffer.
Ob_get_contents()以字符串形式返回当前输出缓冲区。允许您处理脚本的任何输出。
原则:
启用output_buffering时,脚本发送输出时PHP不发送HTTP头。相反,它将这个输出通过管道传输到一个动态增加缓存中(仅在PHP 4。用于0,
它具有集中式输出机制)。您仍然可以修改/添加标头,或者设置cookie,因为标头实际上并没有被发送。当所有脚本终止时,PHP会自动向浏览器发送HTTP头。
然后发送输出缓冲区的内容。