Redirect php位置头重定向即使在输出启动后也能工作

Redirect php位置头重定向即使在输出启动后也能工作,redirect,php-7,php-7.2,Redirect,Php 7,Php 7.2,我认为如果您已经发送了一些输出,就不能在php中使用头('location:..)重定向。但是,这个测试程序在本地服务器上的工作方式与预期的一样 $ cat > index.php Hello, <?php if ($_SERVER['REQUEST_URI'] !== "/") { header('location: /'); die(); } ?> World! 然后当我转到http://localhost:8000/index.php?test=1它将我重定

我认为如果您已经发送了一些输出,就不能在php中使用
头('location:..
)重定向。但是,这个测试程序在本地服务器上的工作方式与预期的一样

$ cat > index.php
Hello,
<?php

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

?>
World!
然后当我转到
http://localhost:8000/index.php?test=1
它将我重定向到
http://localhost:8000


为什么它不抱怨我已经发送了输出?PHP7有什么不同吗?现代浏览器有什么不同吗?演示服务器有什么不同吗?或者我需要做一些稍微不同的事情才能得到上次使用php时得到的错误吗?

我试过你的脚本,它向我报告了预期的结果“无法修改标题”警告,仅显示“你好”


对您来说,最主要的不同点是php.ini中的
output\u buffering
变量-如果未禁用该变量,则它会自动将输出缓冲到某个大小。因此,请检查是否将其设置为“开”或者类似4096的东西。默认值如果关闭,但是在启用它的地方有很多示例配置。

谢谢。现在我还可以通过像这样启动dev服务器
php-nS 0.0.0.0:8000
。从帮助
-n不会使用任何配置(ini)文件
$ php -S localhost:8000