当前位置: 首页 > 面试题库 >

警告:无法修改标头信息-错误已发送的标头

范志勇
2023-03-14
问题内容

我已经为这个错误苦苦挣扎了一段时间了。

首先,我只是以为是空格,但经过进一步研究,我认为这可能是与此类似的问题:

在此标头语句之前,查找所有可能将输出发送给用户的语句。如果找到一个或多个,请更改代码以将标头语句移到它们之前。复杂的条件语句可能会使问题复杂化,但也可能有助于解决问题。考虑一下PHP脚本顶部的条件表达式,该条件表达式尽早确定标头值并将其设置在那里。

我猜想include标头和header()一起引起了问题,但是我不确定如何重新排列代码以消除此错误。

如何清除错误?

<?php
    $username = $password = $token = $fName = "";

    include_once 'header.php';

    if (isset($_POST['username']) && isset($_POST['password']))
        $username = sanitizeString($_POST['username']);

    $password = sanitizeString($_POST['password']); //Set temporary username and password variables
    $token    = md5("$password"); //Encrypt temporary password

    if ($username != 'admin')
    {
        header("Location:summary.php");
    }
    elseif($username == 'admin')
    {
        header("Location:admin.php");
    }
    elseif($username == '')
    {
        header("Location:index.php");
    }
    else
        die ("<body><div class='container'><p class='error'>Invalid username or password.</p></div></body>");

    if ($username == "" || $token == "")
    {
        echo "<body><div class='container'><p class='error'>Please enter your username and password</p></div></body>";
    }
    else
    {
        $query = "SELECT * FROM members WHERE username='$username'AND password = '$token'"; //Look in table for username entered
        $result = mysql_query($query);
        if (!$result)
            die ("Database access failed: " . mysql_error());
        elseif (mysql_num_rows($result) > 0)
        {
            $row = mysql_fetch_row($result);
            $_SESSION['username'] = $username; //Set session variables
            $_SESSION['password'] = $token;

            $fName = $row[0];
        }
    }
?>

问题答案:

长期的答案是,PHP脚本的所有输出都应在变量中进行缓冲。这包括标题和正文输出。然后,在脚本末尾执行所需的任何输出。

解决您的问题的最快方法是添加

ob_start();

作为脚本中的第一件事,如果仅在此脚本中需要它的话。如果您在所有脚本中都需要它,则将其添加为header.php文件中的第一件事。

这将打开PHP的输出缓冲功能。在PHP中,当您输出某些内容(执行回显或打印)时,它必须在那时发送HTTP标头。如果打开输出缓冲,则可以在脚本中输出,但是PHP在刷新缓冲区之前不必发送标头。如果将其打开而不关闭,PHP将在脚本完成运行后自动刷新缓冲区中的所有内容。几乎在所有情况下都打开它确实没有任何危害,并且在某些配置下可能会给您带来很小的性能提升。

如果您有权更改php.ini配置文件,则可以查找和更改或添加以下内容

output_buffering = On

这将关闭输出缓冲,而无需调用ob_start()。



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复:标 头已由PHP发送 每当我尝试提交表单删除表单时,我都会不断收到此错误。 警告:无法修改标头信息-在第106行的C:\ xampp \ htdocs \ speedycms \ deleteclient.php中已经发送过的标头(输出从C:\ xampp \ htdocs \ speedycms \ deleteclient.p

  • 本文向大家介绍PHP 警告:无法修改标头信息-标头已发送,包括了PHP 警告:无法修改标头信息-标头已发送的使用技巧和注意事项,需要的朋友参考一下 示例 外观: 当脚本尝试将HTTP标头发送到客户端但之前已经有输出时,会发生此情况,这导致标头已经发送到客户端。 可能的原因 : 打印,回显:打印和回显语句的输出将终止发送HTTP标头的机会。必须对应用程序流程进行重组以避免这种情况。 原始HTML区域

  • 问题内容: 我是PHP的新手,我刚刚练习了PHP setcookie()并失败了。 http:// localhost / test / index.php http:// localhost / test / view.php 但是我无法运行index.php,像这样的IE警告。 毫无疑问,我启用了IE 6 cookie。 我上面的程序有什么问题吗?谢谢。 使用WinXP OS和XAMPP 1.

  • 问题内容: 我遇到这个错误。而且我不知道如何处理。 无法修改标头信息-已发送的标头(输出从/home/ben213/public_html/wp- includes/pluggable.php上的/home/ben213/public_html/wp- content/themes/Bendaggers/functions.php:9开始) 934行 我的Functions.php文件第9行是:

  • 嗨,目前我还在学习CodeIgniter。我正在尝试使用它的会话,并在自动加载文件中启用了该会话 首先,文件的文件结构是这样的/ 我这样组织我的文件。所有模板都将放入视图/索引中。php 我的问题是我得到了这个错误

  • 我在我的localhost上测试工作良好,现在显示任何错误,但上传到戈迪服务器后。 此错误显示在登录页面中。 错误消息1 消息:无法修改报头信息-已发送的报头(输出开始于 /home/user/public_html/ngapali/test/application/controllers/admin/user.php: 1) 文件名:库/会话。php 电话号码:433 错误消息2 消息:无法修改