[英]PHP - cannot modify header information - headers already sent by (output started at
[英]Php 5.4 Cannot modify header information - headers already sent
最近,我在Ubuntu 12.04 LTS上的此链接中提到了升级到php 5.4:-
sudo add-apt-repository ppa:ondrej/php5-oldstable
sudo apt-get update
sudo apt-get dist-upgrade
我的代码没有任何改变。 但是现在我收到以下错误:
E_WARNING Cannot modify header information - headers already sent by (output started at Abstract.php:588) in functions.php on line 55
引发错误的相关代码:
//Abstract.php
public function outputBody()
{
$body = implode('', $this->_body);
echo $body; //Line 588
}
...
// functions.php
if ($exit) {
if (strtolower(PHP_SAPI) != 'cli') {
header("HTTP/1.1 500 Internal Server Error"); //Line 55
}
echo Bob_Exception_Helper::printException($e, $logStr) . PHP_EOL;
exit (1);
}
我在/etc/php5/cli/php.ini
和/etc/php5/apache2/php.ini
中都添加了以下行,如本问题所述
output_buffering = On
此外,一切都在php 5.3上正常工作。 升级后未更改任何代码。 升级到PHP 5.4之后,就出现了这个问题。
php --version
PHP 5.4.45-4+deprecated+dontuse+deb.sury.org~precise+1 (cli) (built: Jun 24 2016 08:30:18)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
引发错误的php代码:-
public function outputBody()
{
$body = implode('', $this->_body);
echo $body; //As per the warning this line is throwing the error
}
但是仍然出现相同的错误吗? 可以让我知道如何解决这个问题吗?
好的,因此在functions.php文件中的代码之前将调用outputBody()
方法。
如果是if
语句触发错误;
if (strtolower(PHP_SAPI) != 'cli') {
header("HTTP/1.1 500 Internal Server Error"); //Line 55
}
升级PHP时, PHP_SAPI
常量的值显然已更改。 这触发了header()
方法,但是outputBody()
Abstract.php中的 outputBody()
已经运行并将内容回显到已设置标题的页面。 由于一旦发送标头便无法重置标头,因此header()
方法将失败。
看看为什么PHP_SAPI
发生了变化以及更改了什么。 解决此问题应该可以解决您的问题。
当已经有输出发生时,您不能修改标题信息。 (例如echo "xyz";
或者在<?php
标记前面只是一个空格)。 如果您向我们展示代码,这会产生错误,我们也许可以告诉您确切的位置以及发生的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.