【问题标题】:Trace redirect loop跟踪重定向循环
【发布时间】:2010-04-11 16:01:57
【问题描述】:

我有一个大型 PHP 应用程序。在我更改了一些设置后,我得到了一个重定向循环(即浏览器一遍又一遍地重定向到同一页面)。

问题是我不知道此应用程序中的哪个命令(哪个 PHP 文件中的哪一行)导致重定向。有没有办法跟踪对header() 函数的调用?或者——甚至更好——有没有办法在 PHP 中跟踪重定向?

提前致谢,
米歇尔

【问题讨论】:

  • 也许 XDebug 或任何日志记录机制可能会有所帮助。

标签: php http redirect


【解决方案1】:

您可以为此使用XDebug 及其函数跟踪功能。 http://xdebug.org/docs/execution_trace 说:

Xdebug 允许您记录所有函数调用,包括参数并将值返回到不同格式的文件中。

找到调用后,您可以单步执行代码并逐步执行它。然后你需要一个 XDebug 的前端,例如netbeans.

【讨论】:

    【解决方案2】:

    如果你的应用重定向到同一个 URL,你应该在重定向之前检查一下,例如:

    $_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    if ($targetHost !== $_SERVER['HTTP_HOST'] &&
        $targetPath !== $_SERVER['REQUEST_URI_PATH'] &&
        $targetQuery !== $_SERVER['QUERY_STRING']) {
        // redirect
    }
    

    【讨论】:

    • 谢谢。这就是我想做的,但我不知道把这段代码放在哪里,因为我不知道是哪条指令导致了重定向。这是我最初的问题。
    【解决方案3】:

    不是在 php 中,而是在 HTTP 中。是的当然。使用任何 HTTP 嗅探器,例如 LiveHTTPHEaders firefox 插件,并实时查看所有重定向 :)

    【讨论】:

      【解决方案4】:

      您需要做的是覆盖您感兴趣的函数,然后进行回溯以查找文件和行号。

      对于覆盖内置函数:http://php.net/manual/en/function.override-function.php

      用于生成回溯:http://php.net/manual/en/function.debug-backtrace.php

      【讨论】:

        猜你喜欢
        • 2011-03-11
        • 1970-01-01
        • 1970-01-01
        • 2014-04-13
        • 2016-04-07
        • 1970-01-01
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多