当前位置:首页 > CMS教程 > WordPress > 列表

wordpress分页出现:Warning: Cannot modify header information

发布:smiling 来源: PHP粉丝网  添加日期:2015-03-23 16:33:46 浏览: 评论:0 

如果页面出现Warning: Cannot modify header information ? headers already sent by这问题,一般是页面头你在session之前有输出了,下面一起来看看wordpress页面出现此问题解决办法.

最近无意间查看网站时,浏览了一下分类页,正常显示,也就是这个分类文章列表的第一页,然后点到下一页,正常显示,但是再点击第一页时,就出现在错误提示:

Warning:Cannot modify header information – headers already sent by (output started at /home/hotzutic/domains/phpfensi.com/public_html/wp-config.php:1) in/home/hotzutic/domains/phpfensi.com/public_html/wp-includes/pluggable.php on line 1121

按照上面的代码提示,还以为是wordpress程序下的wp-includes/pluggable.php 文件有问题,于是我重新上传了一下相关文件,但是随后,问题依旧,这是怎么回事呢?

于是,在网上查了下,看有没有碰到与我一样的问题,呵呵,还真有类似情况的发生,他们说是代码utf-8带bom的问题,让wp-config.php文件的第一行有空行,才导致这样的错误提示,我仔细看了一下代码,可能还真是,因为错误代码中也提到了这个文件的第一行:public_html/wp-config.php:1

于是我果断地通过 EditPlus 编辑器把wp-config.php文件代码转换成无bom格式的,再查看网站,正常了.

补充:

看了一些网上的方法也没解决,最后在php.ini配置output_buffering默认为4096就没有遇到这个错误了:

output_buffering设置说明:

Off:表示关闭PHP输出缓存

On:打开无限大的输出缓存

4096:打开大小为4096Byte的输出缓存

默认情况下,php buffer是开启的,而且该buffer默认值是4096,即4kb,你可以通过在php.ini配置文件中找到output_buffering配置.当echo,print等输出用户数据的时候,输出数据都会写入到php output_buffering中,直到output_buffering写满,会将这些数据通过tcp传送给浏览器显示。你也可以通过ob_start()手动激活php output_buffering机制,使得即便输出超过了4kb数据,也不真的把数据交给tcp传给浏览器,因为ob_start()将php buffer空间设置到了足够大,只有直到脚本结束,或者调用ob_end_flush函数,才会把数据发送给客户端浏览器.

下面我们来看看解决方案:

1. 把错误警告全不显示,治标不治本的方法

error_reporting(E_ERROR | E_PARSE);这里不要显示E_WARNING即可.

2. 编辑php.ini

打开php.ini文件,找到output_buffering = 改为on或者任何数字.

3. 如果没有权限编辑php.ini,如使用虚拟主机的

在你的空间根目录下建立一个.htaccess文件,内容如下:

AllowOverride AllPHP_FLAG output_buffering On

如果还是不行,那么,再用下面的方法:

在PHP文件的最开始加入:ini_set(”output_buffering”, “1〃);

让这个页面打开PHP的输出缓存.

4. 在PHP文件里解决

ob_start()

启用output buffering机制,Output buffering支持多层次 — 例如,可以多次调用 ob_start() 函数。

ob_end_flush()

发送output buffer(输出缓冲)并禁用output buffering机制。

ob_end_clean()

清除output buffer但不发送,并禁用output buffering。

ob_get_contents()

将当前的output buffer返回成一个字符串,允许你处理脚本发出的任何输出.

原理:output_buffering被启用时,在脚本发送输出时,PHP并不发送HTTP header,相反,它将此输出通过管道(pipe)输入到动态增加的缓存中,只能在PHP 4.0中使用,它具有中央化的输出机制,你仍然可以修改/添加header,或者设置cookie,因为header实际上并没有发送,当全部脚本终止时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容.

5. 如果以上方法都不能等到满意的解决办法,请用如下办法:

用notepad++等编辑器将该文件转为UTF-8 without BOM编码的文件,再试试.

Tags: Warning:Cannot modify header

分享到: