温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何修复PHP中的“标头已发送”错误

发布时间:2020-07-27 03:36:44 来源:网络 阅读:169 作者:前端大大 栏目:开发技术

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

警告:不能更改头信息-已经( 输出在/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()之前,请勿输出任何字符

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI