繁体   English   中英

PHP 5.4无法修改标题信息-标题已发送

[英]Php 5.4 Cannot modify header information - headers already sent

最近,我在Ubuntu 12.04 LTS上的此链接中提到了升级到php 5.4:-

  1. sudo add-apt-repository ppa:ondrej/php5-oldstable
  2. sudo apt-get update
  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM