Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何修复”;“已发送邮件头”;PHP中的错误_Php_Header - Fatal编程技术网

“如何修复”;“已发送邮件头”;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文件,以确定是否是这样。它们应该以字节
    3f3c
    开头。您可以安全地从文件开头删除BOM
    EF BB BF
  • 显式输出,例如调用
    echo
    printf
    readfile
    passthru
    之前的代码

    printf ("Hi %s,</br />", $name);
    
    printf(“嗨%s,
    ,$name);

    在设置cookies之前,这是不允许的。您不能在标题前发送任何输出,甚至不能发送空行。

    这是因为这一行:

    printf ("Hi %s,</br />", $name);
    
    printf(“嗨%s,
    ,$name);
    在发送标题之前,您不应打印/回显任何内容。

    在发送标题之前,不应输出任何内容! 在进行任何输出之前,必须调用发送/修改HTTP头的函数。 否则,调用将失败:

    警告:无法修改标题信息-标题已发送(输出从脚本:行开始)

    修改HTTP头的一些函数包括:

    • /
    • /
    • /
    输出可以是:

    • 无意的:

      • 特别是
      • 以前的错误消息或通知
    • 有意的:

      • 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输出的空白。但一旦应用程序逻辑尝试发送二进制内容(例如生成的图像), 缓冲的无关输出成为一个问题。(必须进行清洁(
      • ob_clean)(
    作为进一步的解决办法。)

  • 缓冲区的大小有限,如果保留默认值,很容易溢出。 这种情况也不少见, 当它发生的时候

因此,这两种方法都可能变得不可靠,尤其是在两种方法之间切换时 开发设置和/或生产服务器。这就是为什么需要输出缓冲 被广泛认为只是一个拐杖/严格来说是一个解决办法

另见 在手册中,关于更多的优点和缺点:

但它在另一台服务器上工作!? 如果您之前没有收到标题警告,那么 已经改变了。它可能未在当前/新服务器上配置

正在检查
标题\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;