У меня странная проблема. В верхней части моей страницы есть оператор if, который, как представляется, игнорируется, когда внутри него находится комманда header (location: xxx).
$check = $authorisation->check(); // i know this results in true by echoing the value // (you've got to believe me on this one) if(!$check){ // redirect to message header("Location: message.php"); exit; }else{ // do nothing, continue with page }
Это ВСЕГДА перенаправляется на страницу message.php, независимо от результата $ authorisation-> check ()!
Странно, когда я комментирую команду header-command и помещаю echo в if-statement для проверки, все работает так, как ожидалось:
$check = $authorisation->check(); // true if(!$check){ // redirect to message echo "you are not welcome here"; }else{ echo "you may enter"; }
Результатом является «вы можете ввести»;
Это также работает так, как ожидалось:
$check = true; if(!$check){ // redirect to message header("Location: message.php"); exit; }else{ // do nothing }
Это только перенаправляется на страницу сообщений, когда $ check = false;
Самое смешное, что я испытываю проблему только на одном сервере, тот же скрипт безупречно работает на testerver.
Любая помощь приветствуется!
Вызовите функцию выхода после перенаправления на другую страницу, иначе в любом случае будет выполнен следующий код.
if(!$check){ // redirect to message header("Location: message.php"); exit; }else{ // do nothing, continue with page } // the following code will be executed if exit is not called ...
вы должны всегда запускать exit
после того, как вы закончите с заголовками, чтобы передача была более быстрой и стабильной для браузера.
Попробуйте так:
if( ... ) { header("Location: message.php"); exit; } // ...
Пожалуйста, прочитайте комментарий для других советов о том, почему это хорошая идея.
Попробуйте поставить error_reporting(-1);
вы увидите что-то новое. На одном из ваших серверов отчет об ошибках PHP устанавливается на более низкий уровень.
Такая ошибка часто возникает из-за того, что контент отправляется в браузер до вызова функции заголовка.
Даже если вы не думаете, что отправляете контент, если ваш файл начинается с пробела или пробела перед «<? Php», вы получите ошибку – это часто довольно тонкая вещь, чтобы заметить / найти.
Буферизация вывода может позволить вам вызвать функцию заголовка даже после того, как вы «отправили» контент – вероятно, поэтому страница работает на одном сервере, а не на другом.
предложение:
напишите ob_start()
вверху и
также напишите exit();
после header();
debug с error_reporting(-1)
как это предлагается в одном ответе
У меня была та же проблема, вы вызываете заголовок («Место: бла-бла») где-то еще в коде. Проверь это.