【问题标题】:php location header redirect works even after output has startedphp 位置标头重定向即使在输出开始后仍然有效
【发布时间】:2018-11-14 23:15:15
【问题描述】:

如果您已经发送了一些输出,我认为您无法在 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 时遇到的错误?

【问题讨论】:

    标签: redirect php-7 php-7.2


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。现在我还设法通过像 thisphp -nS 0.0.0.0:8000 这样启动开发服务器来得到错误。来自帮助-n No configuration (ini) files will be used
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多