У меня очень странная проблема, которую я не могу отследить. Любая помощь в отношении отладки будет значительно приветствуется!
Позвольте мне описать это, используя сценарии.
Сценарий 1 ( неверно )
- PHP обращается к серверу CAS (используя
curl_exec
) и возвращает информацию о пользователе
- PHP проверяет базу данных, чтобы убедиться, что пользователь, возвращенный из CAS, существует и дает сбой (это правильно, я тестирую несуществующего пользователя) и устанавливает сообщение об ошибке на «Пользователь не найден» (это правильное сообщение об ошибке)
- PHP включает в себя
top.php
файл
- Страница случайно обновляется или перенаправляется на себя и начинает процесс заново ... это то, что я не могу понять.
- PHP обращается к серверу CAS (используя
curl_exec
) и получает ошибку, так как билет CAS уже использовался, устанавливая новое сообщение об ошибке «CAS отклонил ваши учетные данные» (что неверно)
- PHP включает файл
top.php
, а не обновляет / перенаправляет во второй раз
- PHP распечатывает "CAS отклонил ваши учетные данные" (что неверно)
Сценарий 2 ( полукорректный )
- PHP обращается к серверу CAS (используя
curl_exec
) и возвращает информацию о пользователе
- PHP проверяет базу данных, чтобы убедиться, что пользователь, возвращенный из CAS, существует и дает сбой (опять же, это правильно, я все еще тестирую несуществующего пользователя) и устанавливает сообщение об ошибке на «Пользователь не найден» (это правильное сообщение об ошибке)
- Я пропускаю
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" />
Итак, переключение вопроса полностью, поскольку у меня не было особого вопроса: Может кто-нибудь объяснить, почему это вызывает обновление страницы, и почему это происходит только иногда (то есть это не постоянно обновить страницу)?