php - я должен вызвать exit () после вызова Location: header? - PullRequest
68 голосов
/ 24 августа 2010

После вызова заголовка функции перенаправления я должен вызвать exit или нет?

<?php // fileA
$urlFailToGoTo = '/formerror.php';

if (sth)
{
   header(sprintf("Location: %s", $urlFailToGoTo));
   exit(); //should I call exit() here? or return?
}

?>

Спасибо

Ответы [ 5 ]

74 голосов
/ 24 августа 2010

Вы определенно должны.В противном случае выполнение скрипта не прекращается.Одной настройки другого заголовка недостаточно для перенаправления.

29 голосов
/ 24 августа 2010

Вы должны, как объясняет @rgroli.Если вы не хотите использовать скобки, вы также можете вызвать header() IN exit():

if(sth) exit(header("Location: http://example.com"));

Заголовок местоположения в HTTP / 1.1 всегда требует абсолютного пути см. примечание здесь .

Примечание: Это не хак, поскольку код выхода используется только в том случае, если параметр является целым числом, а header() производит void (выходит с кодом = 0, нормальный выход).Посмотрите на это как на функцию exit_header(), как это должно быть после заголовка Location.

20 голосов
/ 24 августа 2010

Как правило, рекомендуется exit; (обратите внимание - это ключевое слово, поэтому вам не нужно ()) после отправки заголовка Location:, так как браузеры должны перенаправлять на новую страницу и так далее выполнение текущего скрипта обычно нежелательно.

8 голосов
/ 24 августа 2010

Если у вас нет кода (PHP или HTML) в заголовке, вам не нужно.

4 голосов
/ 14 мая 2014

выход - плохое кодирование.

Если вы когда-нибудь разрабатываете большой проект и хотите создать PHP Unit Testcases, выход вас облажает.

выход прекращает выполнение скрипта и вашего теста! нет способа восстановить тест и сказать, провалился он или нет ...

организуйте свой код так, чтобы выходных данных не было, и сценарий завершался естественным образом, если вы используете редирект ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...