【问题标题】:PHP Warning: Cannot modify header information - headers already sent by [duplicate]PHP 警告:无法修改标头信息 - [重复] 已发送标头
【发布时间】:2014-04-06 15:18:53
【问题描述】:

我知道这个问题已经被问了一百万次了,但我似乎找不到对我有帮助的答案。

我刚刚建立了一个新的 php 网站,正如您在标题中看到的那样,它一直在说:

警告:无法修改标头信息 - 标头已由 /customers/e/7 中的(输出开始于 /customers/e/7/8/andersws.dk/httpd.www/template/index.php:2)发送/8/andersws.dk/httpd.www/template/index.php 第 4 行

到目前为止,文件中的所有内容是:

<!DOCTYPE html>
<?
    if(file_exists('first.run')){
        header('location: index.php');
    }
?>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        // put your code here
        ?>
    </body>
</html>

所以我真的看不出我做错了什么。

【问题讨论】:

  • 这很可能是因为在您的开头&lt;? 顶部的这一行&lt;!DOCTYPE html&gt; 在标题之前算作输出。放在&lt;html&gt;上面——这类问题已经被问过上千次了;是的,成千上万。

标签: php apache redirect warnings


【解决方案1】:

这是因为您在标题之前指定了一个文档类型。发送有效负载后,您无法输出标头。所以改成:

<?
    if(file_exists('first.run')){
        header('location: index.php');
    }
?>
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>

    </body>
</html>

【讨论】:

    【解决方案2】:

    HTTP 标头只能在正文之前发送。页面的所有输出都属于正文。在您的示例中,您试图在 &lt;doctype&gt; 节点的输出之后输出标头。

    使用这个:

    <?
        if(file_exists('first.run')){
            header('location: index.php');
        }
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <?php
            // put your code here
            ?>
        </body>
    </html>
    

    【讨论】:

    • "使用这个:" --- 为什么? ;-) lol
    【解决方案3】:

    使用这个;

    <?php
    ob_start();
    if(file_exists('first.run')){
        header('location: index.php');
        exit;
    }
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <?php
            // put your code here
            ?>
        </body>
    </html>
    <?php ob_end_flush(); ?>
    

    有关`ob_start()的更多详细信息,请参阅here

    【讨论】:

    • "使用这个:" --- 为什么? ;-) Most likely answer --- 有一个实际的原因。
    • 用户说,这类问题有一百万个问题。因此,我认为,OP 已经知道问题的基本根本原因。错字问题,我没有说明原因
    • 我们坚持 50% 正确,50% 错误。我认为最有可能的原因是 OP 在 PHP 之上声明了一个 doctype,它算作 header 之前的输出。发生这种情况的原因太多了,但这就是我的看法。 ;-)
    猜你喜欢
    • 2011-05-09
    • 2011-01-15
    • 1970-01-01
    • 2013-11-24
    • 2012-03-31
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多