【问题标题】:PHP header location-redirect doesn't work - why? [duplicate]PHP 标头位置重定向不起作用 - 为什么? [复制]
【发布时间】:2023-03-19 00:11:01
【问题描述】:

这是我的文件。我想让它重定向,但没有任何反应。为了检查发生了什么,我在标题部分之前添加了一个回声。

它既不会抛出错误也不会重定向到 index.php。怎么了? 我已经打开/关闭了输出缓冲,但没有任何东西让它重定向。我能做什么?

<?
error_reporting(E_ALL);
echo 'This is an error';

header("Location: login.php");
die();
?>

谢谢

【问题讨论】:

  • 是否启用了 display_errors
  • 您提供的代码是否至少输出“这是一个错误”?
  • 不,它没有,但这一切都与 Xdebug 分解标题有关......

标签: php redirect header location


【解决方案1】:

来自PHP documentation

header() 必须在发送任何实际输出之前调用,无论是通过普通 HTML 标记、文件中的空白行还是通过 PHP。

在你的情况下,你在header()之前使用echo

【讨论】:

  • 我知道这就是为什么我在 header() 调用之前做出了回应。它在其他服务器上出错,应该这样做。为什么什么都没发生?
  • 更改标题的替代方法是使用:&lt;?php echo "&lt;script&gt; window.location.replace('login.php') &lt;/script&gt;" ?&gt;
  • Nehal J Wani ^^^ 那条评论帮我做了谢谢
【解决方案2】:

您是否启用了短标签? 试试长标签&lt;?php:

<?php
error_reporting(E_ALL);
header("Location: login.php");
die();
?>

【讨论】:

  • 是的,我确实启用了短标签集,其他一切正常,除了标题内容...
【解决方案3】:

我提醒自己我在实际测试环境中安装了xDebug,谷歌搜索后发现这个站点:http://bugs.xdebug.org/view.php?id=532

所以我将下载最新版本的 xDebug 并为新文件相应地更改 php.ini,一切都像一个魅力。正在发送标头 - 重定向已完成并显示错误。

感谢大家的帮助!

【讨论】:

    【解决方案4】:

    是否启用了 display_errors?
    @Gumbo - 确实如此!

    嗯,当然不是。因为

    为了检查发生了什么,我在标题部分之前添加了一个回显。

    如果您启用了 display_errors,它会显示错误,至少在您 turned output buffering on 时会显示错误。

    因此,首先确保您可以看到错误消息。
    打印出一个未定义的变量,

    error_reporting(E_ALL);
    echo $undef9306;
    

    我相信你不会看到它。 所以,你必须打开显示错误

    接下来,在服务器端,您可以使用headers_sent() 函数来查看是否发送了标头。在客户端使用 HTTP 嗅探器查看是否发送了任何内容

    然后检查您的文件中的 BOM。

    【讨论】:

    • 嗨。恐怕不是。 Display_errors 如前所述启用,但导致此问题的是 xDebug...非常感谢您的帮助 Col.!
    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2014-11-19
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多