在运行脚本时,我会遇到以下几个错误:
警告:无法修改标头信息-标头已由第23行的/some/file.php中的/some-file.php发送(输出开始于/some/files.php:12)
错误消息中提到的行包含header()和setcookie()调用。
这可能是什么原因?如何修复?
在运行脚本时,我会遇到以下几个错误:
警告:无法修改标头信息-标头已由第23行的/some/file.php中的/some-file.php发送(输出开始于/some/files.php:12)
错误消息中提到的行包含header()和setcookie()调用。
这可能是什么原因?如何修复?
当前回答
通常,当我们在回显或打印后发送标头时,会出现此错误。如果在特定页面上出现此错误,请确保该页面在调用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()函数之前不要输出任何字符,甚至不要输出空格或新行
其他回答
一个简单的提示:脚本中的一个简单空格(或不可见的特殊字符),就在第一个<?php标记,可能会导致这种情况!特别是当你在一个团队中工作时,有人在使用一个“弱”IDE,或者用奇怪的文本编辑器在文件中乱动。
我见过这些事;)
而不是下面的行
//header("Location:".ADMIN_URL."/index.php");
写
echo("<script>location.href = '".ADMIN_URL."/index.php?msg=$msg';</script>");
or
?><script><?php echo("location.href = '".ADMIN_URL."/index.php?msg=$msg';");?></script><?php
这肯定能解决你的问题。我也遇到了同样的问题,但我通过以上述方式编写头位置来解决。
这是因为这句话:
printf ("Hi %s,</br />", $name);
在发送邮件头之前,不应打印/回显任何内容。
通常,当我们在回显或打印后发送标头时,会出现此错误。如果在特定页面上出现此错误,请确保该页面在调用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()函数之前不要输出任何字符,甚至不要输出空格或新行
有时,当开发过程同时具有WIN工作站和LINUX系统(托管),并且在代码中,在相关行之前没有看到任何输出时,可能是文件的格式和缺少Unix LF(linefeed)行结束。
为了快速解决这个问题,我们通常要做的是重命名文件,在LINUX系统上创建一个新文件而不是重命名的文件,然后将内容复制到其中。很多时候,这解决了这个问题,因为WIN中创建的一些文件一旦移动到主机,就会导致这个问题。
对于我们通过FTP管理的站点,此修复程序非常简单,有时可以节省新团队成员的一些时间。