Трассировка цикла перенаправления - PullRequest
1 голос
/ 11 апреля 2010

У меня большое PHP-приложение. После того, как я изменил некоторые настройки, я получаю цикл перенаправления (то есть браузер перенаправляется на одну и ту же страницу снова и снова).

Проблема в том, что я не знаю, какая команда (какая строка в каком файле PHP) в этом приложении вызывает перенаправление. Есть ли способ отследить вызовы функции header()? Или, что еще лучше, есть ли способ отследить перенаправления в PHP?

Заранее спасибо,
Michel

Ответы [ 4 ]

2 голосов
/ 12 апреля 2010

Для этого вы можете использовать XDebug и его функции трассировки функций. http://xdebug.org/docs/execution_trace говорит:

Xdebug позволяет регистрировать все вызовы функций, включая параметры и возвращаемые значения, в файл в различных форматах.

Как только вы нашли вызов, вы можете войти в код и выполнить его шаг за шагом. Тогда вам понадобится интерфейс для XDebug, например, 1010 * NetBeans *.

1 голос
/ 11 апреля 2010

Если ваше приложение перенаправляет на тот же 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
}
0 голосов
/ 11 апреля 2010

Что вам нужно сделать, это переопределить интересующую вас функцию, а затем выполнить обратную трассировку, чтобы найти файл и номер строки.

Для переопределения встроенных функций: http://php.net/manual/en/function.override-function.php

Для генерации обратной трассировки: http://php.net/manual/en/function.debug-backtrace.php

0 голосов
/ 11 апреля 2010

Не в php, а в HTTP. Да, конечно. Возьмите любой HTTP-сниффер, например, дополнение Firefox LiveHTTPHEaders, и наблюдайте за всеми перенаправлениями в реальном времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...