Справка по отладке - включение PHP вызывает обновление страницы - PullRequest
1 голос
/ 18 февраля 2011

У меня очень странная проблема, которую я не могу отследить. Любая помощь в отношении отладки будет значительно приветствуется!

Позвольте мне описать это, используя сценарии.

Сценарий 1 ( неверно )

  1. PHP обращается к серверу CAS (используя curl_exec) и возвращает информацию о пользователе
  2. PHP проверяет базу данных, чтобы убедиться, что пользователь, возвращенный из CAS, существует и дает сбой (это правильно, я тестирую несуществующего пользователя) и устанавливает сообщение об ошибке на «Пользователь не найден» (это правильное сообщение об ошибке)
  3. PHP включает в себя top.php файл
  4. Страница случайно обновляется или перенаправляется на себя и начинает процесс заново ... это то, что я не могу понять.
  5. PHP обращается к серверу CAS (используя curl_exec) и получает ошибку, так как билет CAS уже использовался, устанавливая новое сообщение об ошибке «CAS отклонил ваши учетные данные» (что неверно)
  6. PHP включает файл top.php, а не обновляет / перенаправляет во второй раз
  7. PHP распечатывает "CAS отклонил ваши учетные данные" (что неверно)

Сценарий 2 ( полукорректный )

  1. PHP обращается к серверу CAS (используя curl_exec) и возвращает информацию о пользователе
  2. PHP проверяет базу данных, чтобы убедиться, что пользователь, возвращенный из CAS, существует и дает сбой (опять же, это правильно, я все еще тестирую несуществующего пользователя) и устанавливает сообщение об ошибке на «Пользователь не найден» (это правильное сообщение об ошибке)
  3. Я пропускаю top.php, поскольку он был закомментирован, и распечатываю "Пользователь не найден" (это правильное сообщение об ошибке)

Debugging

Итак, я проверил, дважды проверил и трижды проверил, что top.php не использует include, require, redirect (функция, которую мы написали, печатает тег <meta> перенаправления и затем звонит exit;) или любой другой вещи, которая действительно обновляет страницу.

На самом деле я вставил оператор die, который выводит сообщение об ошибке. В одной строке в top.php он печатается правильно. Когда я перемещаю этот оператор на одну строку (ниже тега HTML </div>), он обновляет страницу и печатает неправильное сообщение об ошибке. Там нет даже каких-либо тегов PHP где-либо рядом.

Насколько я могу судить, это означает, что проблема на самом деле не в файле top.php, поскольку распечатка </div> никогда не должна приводить к обновлению / перенаправлению страницы.

Любые идеи о том, как отлаживать отсюда, были бы чрезвычайно полезны. Очистка кешей / буферов? Как лучше отследить, что делает PHP?

Примечание: Никаких ошибок PHP не выводится.

ОБНОВЛЕНИЕ: Да, я нашел виновника! Вместо вызова include 'top.php'; я просто скопировал / вставил код внутри login.php, и это вызвало ту же проблему. Поэтому я начал удалять строки, пока не обнаружил одну, вызывающую проблему:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Итак, переключение вопроса полностью, поскольку у меня не было особого вопроса: Может кто-нибудь объяснить, почему это вызывает обновление страницы, и почему это происходит только иногда (то есть это не постоянно обновить страницу)?

1 Ответ

1 голос
/ 18 февраля 2011

Если у вас есть Firefox, возьмите себе копию livehttpheaders.Включите его и выполните сценарий 1. Проследите заголовки http-запросов и ответов, чтобы увидеть, что там происходит.Он должен предоставить вам больше информации о том, что происходит между браузером и сервером.

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