PHP if-statement игнорируется, когда заголовок (Location: xxx) находится внутри

У меня странная проблема. В верхней части моей страницы есть оператор 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) как это предлагается в одном ответе

У меня была та же проблема, вы вызываете заголовок («Место: бла-бла») где-то еще в коде. Проверь это.