php location header redirect 即使在输出开始后仍然有效
php location header redirect works even after output has started
如果您已经发送了一些输出,我认为您不能在 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 时遇到的错误吗?
我试过你的脚本,对我来说它报告了预期的 "Cannot modify header" 警告并且只显示 "Hello,".
可能与您不同的主要是 php.ini 中的 output_buffering
变量 - 如果未禁用它,它会自动将输出缓冲到一定大小。因此,请检查它是否设置为 "On" 或类似 4096 的值。默认值如果关闭,但有很多启用它的示例配置。
如果您已经发送了一些输出,我认为您不能在 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 时遇到的错误吗?
我试过你的脚本,对我来说它报告了预期的 "Cannot modify header" 警告并且只显示 "Hello,".
可能与您不同的主要是 php.ini 中的 output_buffering
变量 - 如果未禁用它,它会自动将输出缓冲到一定大小。因此,请检查它是否设置为 "On" 或类似 4096 的值。默认值如果关闭,但有很多启用它的示例配置。