首页 > 解决方案 > php 位置标头重定向即使在输出开始后仍然有效

问题描述

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

$ 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 时得到的错误?

标签: redirectphp-7php-7.2

解决方案


我试过你的脚本,对我来说它报告了预期的“无法修改标题”警告,只显示“你好”。

对您来说可能不同的主要事情是output_bufferingphp.ini 中的变量 - 如果没有禁用它,那么它会自动将输出缓冲到一定大小。因此,请检查它是否设置为“开”或类似 4096。默认值是否为关,但有很多示例配置启用它。


推荐阅读