繁体   English   中英

PHP - 无法修改标头信息 - 标头已由(输出开始于

[英]PHP - cannot modify header information - headers already sent by (output started at

我正在使用 PHP,我收到了这条消息

无法修改标头信息 - 标头已由(输出开始于

执行如下代码后:

<?php
    if (condition) {

        if (condition) {
            //Statement
        }

        $to = $_POST['email'];
        $subject = "Registration Confirmation";

        $message = '
                <html>
                    <head>
                        <title>'.$subject.'</title>
                    </head>
                </html>
            ';

        // Always set content-type when sending HTML email
        $headers = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

        // More headers
        $headers .= 'From: <contact@ghanalifestore.com>' . "\r\n";

        mail($to,$subject,$message,$headers);

        header('Location: reset.php?username='.$username);
        exit();

    }else {
        //statement
    }

根据Stackoverflow的这个答案,我认为错误来自变量$message中的 HTML 代码。 我真的不知道如何修改该变量的内容以避免错误。

请帮我解决这个问题。

ob_start();

html 也在发送输出,这就是发生这种情况的原因,所以使用 ob_start(); 在您的代码之上,希望这可以解决您的问题。

来自php 文档

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是从 PHP 发送。

所以移动header('Location: reset.php?username='.$username); 在任何其他类型的输出之前。

顺便说一句,这个问题已经回答了:

只需将代码更改为 echo'window.location="dashboard.php?id=40";'; 然后它会工作

更改您的代码:-
echo'window.location="username='.$username";';
出口();

只写下面的代码,解决了我的问题。 此问题出现在cpanel托管中,而不是在其他托管中

我试图在 PHP 代码中找到这个问题,却发现清除缓存(Firefox)消除了错误。 如果您正在更改代码、复制文件等,您的浏览器可能会变得非常混乱,因此每当您遇到此类错误或任何涉及代码读取方式的错误并且您观察到屏幕上的不规则或令人困惑的日志错误时,请务必清除缓存并重新启动浏览器作为可能的补救措施。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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