运行脚本时,出现如下错误:

警告:不能更改头信息-已经( 输出在/some/file.php:12开始 )在/some/file.php发送上线23头
错误消息中提到的行包含header()和setcookie()调用。

这可能是什么原因? 以及如何解决?

一个简单的提示:在脚本中,就在第一个

我之前曾多次收到此错误,并且可以肯定所有PHP程序员至少一次收到过此错误。

可能的解决方案1

该错误可能是由文件开头之前或文件结尾之后的空格引起的。这些空格不应在此处。

例)这里应该没有空白

   echo "your code here";

?>
THERE SHOULD BE NO BLANK SPACES HERE

检查与导致此错误的文件关联的所有文件。

注意: 有时,像gedit(默认的Linux编辑器)之类的EDITOR(IDE)在保存文件上添加一个空行。 这不应该发生。 如果您使用的是Linux。 您可以使用VI编辑器删除页面末尾?>之后的空格/行。

可能的解决方案2:如果不是您这种情况,请使用ob_start输出缓冲:

 

这将打开输出缓冲,并且将在缓冲页面之后创建标题。

代替下面的行

//header("Location:".ADMIN_URL."/index.php");

echo("");

要么

?>

肯定会解决您的问题。 我遇到了同样的问题,但通过上述方式编写标题位置解决了。

另一个不好的做法可能会引起此问题,尚未说明。

请参见以下代码段:

事情还好吧?

如果“ a_important_file.php”是怎么办:




 ----------This is the end of the an_important_file-------------------

这行不通吗? 为什么?因为已经生成了新行。

现在,尽管这不是常见的情况,但是如果您使用的是MVC框架,该框架会在将内容移交给控制器之前加载大量文件? 这并非罕见的情况。 为此做好准备。

从PSR-2 2.2开始:

所有PHP文件都必须使用Unix LF (linefeed) line ending 。
所有PHP文件都必须以single blank line结尾。
only php包含only php文件中必须omitted ?>标记
相信我,遵循这些标准可以为您节省很多时间:)

通常,当我们在回显或打印后发送标题时,会出现此错误。 如果在特定页面上发生此错误,请确保在调用start_session()之前该页面没有回显任何内容。

不可预测的错误示例:

//your page content
再举一个例子:

 

结论:在调用session_start()或header()函数header()甚至是空格或换行符session_start()之前,请勿输出任何字符