为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
杨__羊羊 2019-11-25 10:23:44
我已经为这个错误苦苦挣扎了一段时间了。首先,我只是认为这是空白,但是经过进一步研究,我认为这可能是与此类似的问题:在此标头语句之前,查找所有可能将输出发送给用户的语句。如果找到一个或多个,请更改代码以将标头语句移到它们之前。复杂的条件语句可能会使问题复杂化,但也可能有助于解决问题。考虑一下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];        }    }?>
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

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


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


ob_start();

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


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


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


output_buffering = On

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


要了解有关输出缓冲的更多信息,请访问http://php.net/manual/en/book.outcontrol.php


查看完整回答
反对 回复 2019-11-25
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

检查的东西echoprint()printr()在包括文件,header.php

可能是问题所在,或者如果有任何MVC文件,请检查之后的空格数?>。这也可能造成问题。


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 527 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信