“如何修复”;“已发送邮件头”;PHP中的错误
运行脚本时,我会遇到如下错误:“如何修复”;“已发送邮件头”;PHP中的错误,php,header,Php,Header,运行脚本时,我会遇到如下错误: <?php // Note the space before "<?php" ?> 警告:无法修改标题信息-标题已由第23行的/some/file.php中的/some/file.php中的(输出开始于/some/file.php:12)发送 错误消息中提到的行包含和调用 这可能是什么原因?以及如何修复它?在发送HTTP头(带或)之前发送任何内容时,会触发此错误消息。在HTTP头之前输出内容的常见原因如下: 意外的空白,通常在文件的开头或结
<?php
// Note the space before "<?php"
?>
警告:无法修改标题信息-标题已由第23行的/some/file.php中的/some/file.php中的(输出开始于/some/file.php:12)发送
错误消息中提到的行包含和调用
这可能是什么原因?以及如何修复它?在发送HTTP头(带或)之前发送任何内容时,会触发此错误消息。在HTTP头之前输出内容的常见原因如下:
- 意外的空白,通常在文件的开头或结尾,如下所示:
<?php // Note the space before "<?php" ?>
?>
——反正这不是必需的
- 在php文件的开头。使用十六进制编辑器检查php文件,以确定是否是这样。它们应该以字节
开头。您可以安全地从文件开头删除BOM3f3c
EF BB BF
- 显式输出,例如调用
,echo
,printf
,readfile
,passthru
作为进一步的解决办法。)之前的代码
printf ("Hi %s,</br />", $name);
printf(“嗨%s,,$name);
在设置cookies之前,这是不允许的。您不能在标题前发送任何输出,甚至不能发送空行。这是因为这一行:printf ("Hi %s,</br />", $name);
在发送标题之前,您不应打印/回显任何内容。在发送标题之前,不应输出任何内容! 在进行任何输出之前,必须调用发送/修改HTTP头的函数。 否则,调用将失败: 警告:无法修改标题信息-标题已发送(输出从脚本:行开始) 修改HTTP头的一些函数包括:printf(“嗨%s,,$name);
- /
- /
- /
- 无意的:
- 特别是
- 以前的错误消息或通知
- 有意的:
,print
和其他产生输出的功能echo
- 原始
PHP前面的部分
应该省略关闭标记。这避免了一小部分这种情况。 (通常情况下,
脚本是罪魁祸首。)include()d
- 错误源被称为“第0行未知”
如果没有错误源,它通常是一个PHP扩展或PHP.ini设置
它被具体化了
- 有时是
流编码设置gzip
- 但它也可以是任何双重加载的
模块 生成隐式PHP启动/警告消息。扩展=
- 有时是
- 前面的错误消息 如果另一个PHP语句或表达式导致警告消息或 请注意,打印出来时,这也算作过早输出 在这种情况下,您需要避免错误, 延迟语句执行,或使用以下命令抑制消息:。 或- 当任何一个都不妨碍以后的调试时 没有错误消息 如果根据
禁用了php.ini
或错误报告
, 那么就不会出现任何警告。但是忽略错误并不能解决问题 走开。在过早输出后仍无法发送标题 因此,当显示错误
自动重定向失败时,这是非常困难的 建议探测警告。用两个简单的命令重新启用它们 在调用脚本顶部:标题(“位置:…”)
或error_reporting(E_ALL); ini_set("display_errors", 1);
ob_clean)(设置错误处理程序(“变量转储”)代码>如果所有其他操作都失败 说到重定向头,您应该经常使用这样的习惯用法 这适用于最终代码路径:
最好是打印用户消息的实用功能 如果出现exit(header("Location: /finished.html"));
故障 作为解决方法的输出缓冲 PHPs 是缓解此问题的一个变通方法。它通常工作可靠,但不应该 替代正确的应用程序结构和将输出与控制分离 逻辑。它的实际目的是最小化到Web服务器的分块传输标题()
- 尽管如此,设置还是有帮助的。 在中配置它 或通过 甚至 现代FPM/FastCGI设置。
启用它将允许PHP缓冲输出,而不是立即将其传递给Web服务器。因此,PHP可以聚合HTTP头- 同样,它也可以呼叫 在调用脚本的顶部。但由于多种原因,其可靠性较低:
- 即使
启动了第一个脚本,也可以使用空格或 BOM可能在之前被洗牌 - 它可以隐藏HTML输出的空白。但一旦应用程序逻辑尝试发送二进制内容(例如生成的图像), 缓冲的无关输出成为一个问题。(必须进行清洁(
- 缓冲区的大小有限,如果保留默认值,很容易溢出。 这种情况也不少见, 当它发生的时候
标题\u sent()
您始终可以使用来探测
还是有可能。。。发送标题。这对于有条件地打印很有用
信息或应用其他回退逻辑
if (headers_sent()) {
die("Redirect failed. Please click on this link: <a href=...>");
}
else{
exit(header("Location: /user.php"));
}
if(headers\u sent()){
die(“重定向失败。请单击此链接:
可用于页面重定向:
<script> location.replace("target.html"); </script>
l
error_reporting(E_ALL);
ini_set("display_errors", 1);
exit(header("Location: /finished.html"));
if (headers_sent()) {
die("Redirect failed. Please click on this link: <a href=...>");
}
else{
exit(header("Location: /user.php"));
}
<meta http-equiv="Location" content="http://example.com/">
<meta http-equiv="Refresh" content="2; url=../target.html">
<script> location.replace("target.html"); </script>
echo "your code here";
?>
THERE SHOULD BE NO BLANK SPACES HERE
<?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");
?>
<?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-------------------
<?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
header("location: http://example.com", true, 301 ); exit;
echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; exit;