首页 > CMS > Wordpress > 正文

解决Warning: Cannot modify header information - headers alrea

2024-09-07 00:51:26
字体:
来源:转载
供稿:网友

下面是我自己面临的问题,我不是去测试函数遇到的,我是在换服务器的时候遇到的(由VPS转到hostgator),然后换主题激活时遇到这个问题的,才开始一直以为是wordpress4.0的兼容性问题,去试验3.9版本的问题依旧,所以试着用互联网上各种文章解决,不幸的是试验了很多帖子的方法,都失败了,最后仔细尝试每一个不同的方法才得以成功,最后得出是空白行和编码问题,在此也希望把这个帖子和问题描述更加详细一点,希望节省大家的时间.

下面原理介绍有点深奥可以略过,本人自己也看不懂就知道是那么回事.

近几天在测试有关跨域名cookies存储问题,在某个php测试页面里的header函数一直遭遇:Warning: Cannot modify header information – headers already sent by错误提示。

为了解决该问题,翻山越岭地用google查询了相关资料,造成该问题的原因是:函数 header(),setcookie() 和 session 函数需要在输出流中增加头信息。但是头信息只能在其它任何输出内容之前发送。在使用这些函数前不能有任何(如 HTML)的输出。函数 headers_sent() 能够检查您的脚本是否已经发送了头信息。

来继续了解下原理:PHP脚本开始执行时,它可以同时发送header(标题)信息和主体信息。 Header信息(来自 header() 或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中。 这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type 标题)。但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print() 调用),那么PHP就必须先发送完所有的Header,然后终止 HTTP header。而后继续发送主体数据。从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。

解决方案如下(须保证出错函数之前没有任何输出):

1、如果说这条仅仅只是错误提示,并不影响你程序正常运作,那么只需要“屏蔽”它即可。在页面顶部的php标签中加入ob_start();,在返回的信息下面加入ob_end_flush();,这样就可以屏蔽错误信息。

... HTML codes ...//开源软件:Vevb.com

2、反之要彻底解决,正冰是通过Notepad++先建立一个空白页面,然后将编码设置为Encode in UTF-8 without BOM,然后将出问题页面代码复制进去保存为一个新页面即可。

因为所测试的页面还有一个setcookie函数,这个也会导致这样的问题出现,简单摘录如下:cookie本身在使用上有一些限制,例如:

呼叫setcookie的叙述必须放在标签之前

呼叫setcookie之前,不可使用echo

直到网页被重新载入后,cookie才会在程式中出现

setcookie函数必须在任何资料输出至浏览器前,就先送出.

解决方法就是在程序开始用ob_start();这个函数.

3、如果问题出现在function文件里面,第一行一般是编码的问题用2的方法解决,如果是出现在其他行一般是空白行引起的,找到文件所在行删除即可,还不行的话直接用2的方法.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表