在运行脚本时,我会遇到以下几个错误:
警告:无法修改标头信息-标头已由第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()调用。
这可能是什么原因?如何修复?
当前回答
我以前多次遇到过这个错误,我确信所有的PHP程序员都至少在以前遇到过一次这个错误。
可能的解决方案1
此错误可能是由文件开始之前或文件结束之后的空格造成的。这些空格不应在此处。
前)这里不应该有空格在这里回显“您的代码”;?>这里不应该有空格检查与导致此错误的文件关联的所有文件。注意:有时像gedit(默认的linux编辑器)这样的EDITOR(IDE)会在保存文件中添加一行空白。这不应该发生。如果您使用的是Linux。您可以使用VI编辑器删除?>之后的空格/行在页面末尾。可能的解决方案2:如果不是这样,则使用ob_start输出缓冲:<?php文件ob_start();//代码ob_end_flush();?> 这将打开输出缓冲,页面缓冲后将创建标题。
其他回答
而不是下面的行
//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
这肯定能解决你的问题。我也遇到了同样的问题,但我通过以上述方式编写头位置来解决。
通常,当我们在回显或打印后发送标头时,会出现此错误。如果在特定页面上出现此错误,请确保该页面在调用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程序员都至少在以前遇到过一次这个错误。
可能的解决方案1
此错误可能是由文件开始之前或文件结束之后的空格造成的。这些空格不应在此处。
前)这里不应该有空格在这里回显“您的代码”;?>这里不应该有空格检查与导致此错误的文件关联的所有文件。注意:有时像gedit(默认的linux编辑器)这样的EDITOR(IDE)会在保存文件中添加一行空白。这不应该发生。如果您使用的是Linux。您可以使用VI编辑器删除?>之后的空格/行在页面末尾。可能的解决方案2:如果不是这样,则使用ob_start输出缓冲:<?php文件ob_start();//代码ob_end_flush();?> 这将打开输出缓冲,页面缓冲后将创建标题。
常见问题:
(复制自:源)
====================
1) 在标题(……..)之前不应有任何输出(即echo...或HTML代码);命令
2) 删除<?php及其之后?>标签。
3) 黄金法则!-检查php文件(如果包含其他文件)是否具有UTF8而没有BOM编码(而不仅仅是UTF-8)。这在很多情况下都是一个问题(因为UTF8编码的文件在php文件的开头有一个特殊的字符,而您的文本编辑器不会显示)!!!!!!!!!!!
4) 在标题(…)之后;您必须使用exit;
5) 始终使用301或302参考:
header("location: http://example.com", true, 301 ); exit;
6) 打开错误报告并查找错误。您的错误可能是由于某个函数不工作导致的。打开错误报告时,应始终首先修复最顶部的错误。例如,它可能是“警告:date_default_timezone_get():依赖系统的时区设置是不安全的。”-然后往下看,您可能会看到“headers not send”错误。修复最上面(第一个)错误后,重新加载页面。如果仍有错误,请再次修复最上面的错误。
7) 如果以上任何一项都没有帮助,请使用JAVSCRIPT重定向(但是,强烈不推荐的方法),这可能是自定义情况下的最后机会…:
echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; exit;
这是因为这句话:
printf ("Hi %s,</br />", $name);
在发送邮件头之前,不应打印/回显任何内容。