Справка по отладке — включение PHP вызывает обновление страницы

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

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

Сценарий 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, поскольку оно было закомментировано, и вывожу "Пользователь не найден" (это правильное сообщение об ошибке)

Отладка

Итак, я проверил, дважды и трижды проверил, что 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" />

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


person Topher Fangio    schedule 17.02.2011    source источник
comment
Вы действительно видите, как браузер загружает новую страницу? Вы видите новый второй запрос в журнале доступа Apache?   -  person Dan Grossman    schedule 18.02.2011
comment
Попробуйте просмотреть все, что вы получаете в браузере, особенно заголовки ответов, используя Web Inspector или Firebug.   -  person deceze♦    schedule 18.02.2011
comment
Включенный файл находится в другом каталоге? Возможно, это связано с тем, что у вас есть перенаправление .htaccess.   -  person shmeeps    schedule 18.02.2011


Ответы (1)


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

person David Gillen    schedule 17.02.2011
comment
+1 - Большое спасибо за это, я раньше не видел livehttpheaders! - person Topher Fangio; 18.02.2011