运行脚本时,出现以下错误: php
警告:不能更改头信息-已经( 输出在/some/file.php:12开始 )在/some/file.php发送上线23头 程序员
错误消息中提到的行包含header()
和setcookie()
调用。 cookie
这多是什么缘由? 以及如何解决? session
一个简单的提示:在脚本中,就在第一个<?php
标记以前的简单空格(或不可见的特殊字符)会致使这种状况! 尤为是当您在团队中工做且有人在使用“弱” IDE或使用奇怪的文本编辑器弄乱了文件时。 框架
我看过这些东西;) 编辑器
我以前曾屡次收到此错误,而且能够确定全部PHP程序员至少一次收到过此错误。 函数
可能的解决方案1 spa
该错误多是由文件开头以前或文件结尾以后的空格引发的。这些空格不该在此处。 code
例)这里应该没有空白 ip
echo "your code here"; ?> THERE SHOULD BE NO BLANK SPACES HERE
检查与致使此错误的文件关联的全部文件。
注意: 有时,像gedit(默认的Linux编辑器)之类的EDITOR(IDE)在保存文件上添加一个空行。 这不该该发生。 若是您使用的是Linux。 您可使用VI编辑器删除页面末尾?>以后的空格/行。
可能的解决方案2:若是不是您这种状况,请使用ob_start输出缓冲:
<?php ob_start(); // code ob_end_flush(); ?>
这将打开输出缓冲,而且将在缓冲页面以后建立标题。
代替下面的行
//header("Location:".ADMIN_URL."/index.php");
写
echo("<script>location.href = '".ADMIN_URL."/index.php?msg=$msg';</script>");
要么
?><script><?php echo("location.href = '".ADMIN_URL."/index.php?msg=$msg';");?></script><?php
确定会解决您的问题。 我遇到了一样的问题,但经过上述方式编写标题位置解决了。
另外一个很差的作法可能会引发此问题,还没有说明。
请参见如下代码段:
<?php include('a_important_file.php'); //really really really bad practise header("Location:A location"); ?>
事情还好吧?
若是“ a_important_file.php”是怎么办:
<?php //some php code //another line of php code //no line above is generating any output ?> ----------This is the end of the an_important_file-------------------
这行不通吗? 为何?由于已经生成了新行。
如今,尽管这不是常见的状况,可是若是您使用的是MVC框架,该框架会在将内容移交给控制器以前加载大量文件? 这并不是罕见的状况。 为此作好准备。
Unix LF (linefeed) line ending
。 single blank line
结尾。 only php
包含only php
文件中必须omitted
?>标记 相信我,遵循这些标准能够为您节省不少时间:)
一般,当咱们在回显或打印后发送标题时,会出现此错误。 若是在特定页面上发生此错误,请确保在调用start_session()
以前该页面没有回显任何内容。
不可预测的错误示例:
<?php //a white-space before <?php also send for output and arise error session_start(); session_regenerate_id(); //your page content
再举一个例子:
<?php includes 'functions.php'; ?> <!-- This new line will also arise error --> <?php session_start(); session_regenerate_id(); //your page content
结论:在调用session_start()
或header()
函数header()
甚至是空格或换行符session_start()
以前,请勿输出任何字符