一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2014-12-05 编辑:简简单单 来源:一聚教程网

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

Warning: Cannot modify header information – headers already sent by (output started at /home/hotzutic/domains/shop.ssmay.com/public_html/wp-config.php:1) in/home/hotzutic/domains/shop.ssmay.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编码的文件,再试试.

造成的原因主要由以下两点:

一,在Header()函数之间输出了其他内容(一般由浏览器隐藏发送),导致了后来的Header不能再次发送新的页面类型。这可以通过开启Output_Buffering来解决,方法2,3,4就是这样。

热门栏目