После вызова заголовка функции переадресации я должен вызвать exit или нет?
<?php // fileA $urlFailToGoTo = '/formerror.php'; if (sth) { header(sprintf("Location: %s", $urlFailToGoTo)); exit(); //should I call exit() here? or return? } ?>
спасибо
Вы определенно должны. В противном случае выполнение скрипта не прекращается. Установка другого заголовка недостаточно для перенаправления.
Вы должны, как объясняет @rgroli. Если вы не хотите беспокоиться о скобках, вы также можете вызвать header()
IN exit()
:
if(sth) exit(header("Location: http://example.com"));
Заголовок заголовка в HTTP / 1.1 всегда требует абсолютного пути, см. Примечание здесь .
Примечание. Это не хак, так как код выхода используется только в том случае, если параметр является целым числом, тогда как header()
создает void (он выходит с кодом = 0, обычный выход). Посмотрите на него как на exit_header()
как это должно быть после заголовка Location
.
Как правило, хорошая практика – exit;
(обратите внимание – это ключевое слово, поэтому вам не нужно ()
) после отправки заголовка Location:
поскольку браузеры должны перенаправляться на новую страницу, и поэтому дальнейшее выполнение текущего скрипта обычно нежелательно.
Если у вас нет кода (PHP или HTML) под заголовком, вам не обязательно.
выход – плохое кодирование.
если вы когда-либо разрабатываете большой проект и хотите создать тестовые модули PHP Unit, выход вас испортит.
exit завершает сценарий и ваш тестовый тест! нет способа восстановить тест и сказать, если он потерпел неудачу или нет …
упорядочивайте свой код так, что нет выхода, и скрипт заканчивается естественно, если вы используете перенаправление …