即使在输出开始后,php location header redirect也能正常工作

时间:2018-06-05 12:52:44

标签: redirect php-7 php-7.2

如果您已经发送了一些输出,我认为您无法在php中使用header('location:..进行重定向。但是,此测试程序与本地服务器一样(非)预期。

$ cat > index.php
Hello,
<?php

if ($_SERVER['REQUEST_URI'] !== "/") {
  header('location: /');
  die();
}

?>
World!

然后我像这样启动php本地服务器

$ php -S localhost:8000

然后当我转到http://localhost:8000/index.php?test=1时,它会将我重定向到http://localhost:8000

为什么不抱怨我已经发送了输出?这是关于PHP 7的不同之处吗?现代浏览器有什么不同?关于演示服务器的一些不同之处?或者我是否需要做一些稍微不同的事情以获得我上次使用php时出现的错误?

1 个答案:

答案 0 :(得分:1)

我尝试了你的脚本,对我来说它报告了预期的&#34;无法修改标题&#34;警告并且只显示&#34;您好,&#34;。

对你来说可能有所不同的是你的php.ini中的output_buffering变量 - 如果它没有被禁用,那么它会自动将输出缓冲到一定的大小。因此,检查它是否设置为&#34; On&#34;或类似于4096.默认值为Off,但有很多样本配置启用它。