“如何修复”;“已发送邮件头”;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
在发送HTTP头(带有或)之前发送任何内容时,会触发此错误消息。在HTTP头之前输出内容的常见原因如下:
- 意外的空白,通常在文件的开头或结尾,如下所示:
<?php // Note the space before "<?php" ?>
——反正这不是必需的?>
- 在php文件的开头。使用十六进制编辑器检查php文件,以确定是否是这样。它们应该以字节
开头。您可以安全地从文件开头删除BOM3f3c
EF BB BF
- 显式输出,例如调用
,echo
,printf
,readfile
,passthru
之前的代码
printf ("Hi %s,</br />", $name);
在设置cookies之前,这是不允许的。您不能在标题前发送任何输出,甚至不能发送空行。您可以这样做printf(“嗨%s,,$name);
printf ("Hi %s,</br />", $name);
printf(“嗨%s,,$name);
在设置cookies之前,这是不允许的。您不能在标题前发送任何输出,甚至不能发送空行。这是因为这一行:printf ("Hi %s,</br />", $name);
printf(“嗨%s,,$name);
在发送标题之前,您不应打印/回显任何内容。这是因为这一行: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);
设置错误处理程序(“变量转储”)代码>如果所有其他操作都失败 说到重定向头,您应该经常使用这样的习惯用法 这适用于最终代码路径:
最好是打印用户消息的实用功能 如果出现exit(header("Location: /finished.html"));
故障 作为解决方法的输出缓冲 PHPs 是缓解此问题的一个变通方法。它通常工作可靠,但不应该 替代正确的应用程序结构和将输出与控制分离 逻辑。它的实际目的是最小化到Web服务器的分块传输标题()
- 尽管如此,设置还是有帮助的。 在中配置它 或通过 甚至 现代FPM/FastCGI设置。
启用它将允许PHP缓冲输出,而不是立即将其传递给Web服务器。因此,PHP可以聚合HTTP头- 同样,它也可以呼叫 在调用脚本的顶部。但由于多种原因,其可靠性较低:
- 即使
启动了第一个脚本,也可以使用空格或 BOM可能在之前被洗牌 - 它可以隐藏HTML输出的空白。但一旦应用程序逻辑尝试发送二进制内容(生成的ima)
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;
- 意外的空白,通常在文件的开头或结尾,如下所示: