繁体   English   中英

为什么我没有收到“警告:无法修改标头信息-标头已经发送”的信息,我希望得到它?

[英]Why I'm not getting a 'Warning: Cannot modify header information - headers already sent by' as I expected to get one?

我在Windows 10家庭单一语言版本上运行的计算机上使用PHP 7.1.11

我在机器上使用XAMPP服务器。

我在这台机器上使用以下浏览器:

  1. Google Chrome(版本62.0.3202.94(正式版本)(64位))
  2. Firefox Quantum(57.0.1(64位))
  3. Opera(版本:49.0.2725.47)
  4. 微软Edge 41.16299.15.0

我知道header()函数的详细信息及其工作方式。

但是,在上述四种Web浏览器上,以下程序的运行方式确实很怪异。 即使在将输出发送到客户端之后,header()函数仍在工作。

这怎么可能?

以下是我的代码(将其重定向到我提到的URL):

    <!DOCTYPE html>
    <html>
      <body>
        <p>Welcome to my website!</p><br /> 
        <?php
          ini_set('display_errors', 1);
          ini_set('display_startup_errors', 1);
          error_reporting(E_ALL); 
          if($test) { 
            echo 'Welcome to my website<br />You\'re in!'; 
          } else { 
            header('Location: http://www.espncricinfo.com'); 
          } 
        ?>
      </body>
    </html>

我原本希望收到警告“无法修改标头信息-标头已发送”,但令人惊讶的是它将我重定向到了URL http://www.espncricinfo.com/

为什么?

如果您以某种方式使用输出缓冲 (无论是手动操作还是由于PHP配置为自动执行此操作),只要未刷新初始缓冲区,仍然可以添加标头。

名称所暗示的是输出缓冲的作用:将输出放在缓冲区中,以便稍后发送,而不是立即输出数据。 因此,只要未发送HTTP响应消息的正文数据,您仍然可以发送标头数据。


要检查PHP是否配置为自动缓冲输出,可以执行以下操作之一:

  1. 检查php.ini配置文件并搜索字符串output_buffering
  2. var_dump( ini_get( 'output_buffering' ) );
  3. phpinfo(); (转储整个配置)并搜索字符串output_buffering

如果启用了输出缓冲,则该值将是缓冲区大小(以字节为单位)(如果已如此配置), "On"true或与此相关的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM