Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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_Http_Http Headers_Webserver_Header Fields - Fatal编程技术网

Php 为什么我没有收到“警告:无法修改标题信息-标题已由发送人”的警告,因为我希望收到警告?

Php 为什么我没有收到“警告:无法修改标题信息-标题已由发送人”的警告,因为我希望收到警告?,php,http,http-headers,webserver,header-fields,Php,Http,Http Headers,Webserver,Header Fields,我在运行Windows10家庭单语言版的机器上使用PHP7.1.11 我正在我的机器上使用XAMPP服务器 我正在这台机器上使用以下浏览器: 谷歌ChromeVersion 62.0.3202.94官方版本64位 Firefox Quantum57.0.1 64位 操作厌恶度:49.0.2725.47 Microsoft Edge 41.16299.15.0 我知道header函数的细节以及它是如何工作的 但以下程序在上述四种web浏览器上的运行方式都很奇怪。即使在将输出发送到客户机之后,hea

我在运行Windows10家庭单语言版的机器上使用PHP7.1.11

我正在我的机器上使用XAMPP服务器

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

谷歌ChromeVersion 62.0.3202.94官方版本64位 Firefox Quantum57.0.1 64位 操作厌恶度:49.0.2725.47 Microsoft 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>
我希望得到警告“无法修改标题信息-标题已由发送”,但令人惊讶的是,它将我重定向到URLhttp://www.espncricinfo.com/?

为什么?

如果您以某种方式使用—或者因为这样做—只要初始缓冲区尚未刷新,您仍然可以添加头

输出缓冲的作用就是名称所暗示的:将输出放在一个缓冲区中,以便在稍后的阶段发送,而不是立即输出数据。因此,只要尚未发送的主体数据,您仍然可以发送头数据

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

检查php.ini配置文件并搜索字符串输出缓冲 变量转储ini获取“输出缓冲”; phpinfo;转储整个配置并搜索字符串输出缓冲
如果启用了输出缓冲,则该值将是缓冲区大小(以字节为单位,如果按此方式配置),或者是On或true,或者类似的值

你收到通知了吗?听起来你的错误检查被禁用了。检查你的PHP配置,看看你是否启用了输出缓冲。@nogad:我没有收到任何通知或其他任何东西。当我从本地主机点击这个文件的URL时,我会被重定向到该URL。我的问题是,无论错误报告状态是打开还是关闭,标头功能都不必工作,因为某些输出已经发送到浏览器。为什么会发生这种情况?您应该得到$test的通知,因此您的错误检查\显示是off@DecentDabbler:这里输出缓冲必须做什么?我应该如何检查上述代码中输出缓冲的状态?表示在配置中是打开还是关闭。@php请参阅我对答案的补充。我使用var_dump ini_get'output_buffering'检查了状态缓冲状态;死亡通过在PHP开始标记之后立即纠正此代码行,我可以说输出缓冲在配置中是打开的,并且输出缓冲是在我的程序中执行头函数的唯一原因吗?@PHPLover yesp,如果您可以访问PHP.ini配置文件,设置output_buffering=Off搜索output_buffering并重新启动web服务器。或者,也可以先输出4096字节以上的正文数据,然后尝试调用header。现在,您应该再次收到预期的警告。