“如何修复”;“已发送邮件头”;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
    在发送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);

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

      这是因为这一行:

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

      在发送标题之前,您不应打印/回显任何内容。

      这是因为这一行:

      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输出的空白。但一旦应用程序逻辑尝试发送二进制内容(生成的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;