您好,登录后才能下订单哦!
运行脚本时,出现如下错误:
警告:不能更改头信息-已经( 输出在/some/file.php:12开始 )在/some/file.php发送上线23头
错误消息中提到的行包含header()和setcookie()调用。
这可能是什么原因? 以及如何解决?
一个简单的提示:在脚本中,就在第一个<?php标记之前的简单空格(或不可见的特殊字符)会导致这种情况! 尤其是当您在团队中工作且有人在使用“弱” IDE或使用奇怪的文本编辑器弄乱了文件时。
我之前曾多次收到此错误,并且可以肯定所有PHP程序员至少一次收到过此错误。
可能的解决方案1
该错误可能是由文件开头之前或文件结尾之后的空格引起的。这些空格不应在此处。
例)这里应该没有空白
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框架,该框架会在将内容移交给控制器之前加载大量文件? 这并非罕见的情况。 为此做好准备。
从PSR-2 2.2开始:
所有PHP文件都必须使用Unix LF (linefeed) line ending 。
所有PHP文件都必须以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()之前,请勿输出任何字符
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。