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