2010-08-24 3 views
61

После вызова заголовка функции переадресации я должен вызвать exit или нет?php - Должен ли я вызвать exit() после вызова заголовка Location:?

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

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

?> 

Спасибо

+1

возможный дубликат [Почему мне нужно вызывать «exit» после перенаправления через заголовок («Местоположение ..») в PHP?] (http://stackoverflow.com/questions/2747791/why-i-have-to-call- exit-after-redirection-through-headerlocation-in-php) –

ответ

63

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

+0

Здравствуйте, Oliver, Выполняет ли выход завершение выполнения скрипта в formerror.php? Я думаю, что мой вопрос заключается в том, что я называю «exit» после «header». какой сценарий затронут и больше не будет выполнен? Спасибо – q0987

+1

Выход всегда прерывает текущий скрипт (в вашем случае «fileA»). Страница, на которую вы перенаправляете («/formerror.php»), вообще не затрагивается. Перенаправление говорит вашему браузеру инициировать новый HTTP-запрос в том месте, которое вы указали в «Местоположение». Это в основном то же самое, что и ручное нажатие ссылки на «formerror.php». – rgroli

+0

Большое спасибо :) – q0987

17

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

7

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

+0

Hello aromawebdesign.com, У меня есть код в formerror.php. Это проблема? Спасибо – q0987

+0

, если у вас есть какой-либо код после вызова заголовка, вы должны вызвать die(); или exit(); – Hydrino

22

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

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

Расположения заголовок в HTTP/1.1 всегда требует абсолютного пути see the note here.

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

+1

Я думаю, вы имели в виду * 'header' ** IN **' exit() '*? ;) – yckart

+0

Разве это не означает, что вы передаете вывод 'header' в качестве кода выхода' exit'? Разве это не было бы нежелательно? – ADTC

+0

@ADTC 'header()' в PHP возвращает void, а код выхода используется только в том случае, если этот параметр является целым числом. В этом случае он просто отключает генерации кода (подразумевая код выхода = 0, нормальный выход). –

5

выход плохой код.

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

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

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

+1

Я думаю, что это отказ программного обеспечения для тестирования, если он не может изолировать скрипт, который он тестирует. Это похоже на завершение работы компьютера, поскольку сценарий оболочки завершается с помощью команды 'exit'. – ADTC

+0

Нет, это просто неправильно, чтобы прекратить что-либо между чем угодно. есть стек по причине программирования. все это началось с вызова функции, и все это закончится вызовом функции. – Umingo

+2

Я понятия не имею, что вы говорите ': /' – ADTC

Смежные вопросы