Допустим, код выглядит примерно так:
if(!$test) { header("Location: somefile.html"); ...some PHP code.... header("Location: anotherfile.html"); }
Выполняется ли какой-нибудь PHP-код ? Если да, то что происходит с последующим HTTP-ответом (-ами) в нем (например: второй оператор заголовка в коде)?
Да – код будет выполнен.
header()
будет настраивать возвращаемые заголовки, а не отправлять их сразу.
Если между двумя вызовами нет выхода, будет учтен только последний .
Однако, если вы выведете что-либо перед вторым вызовом, то заголовки будут отправлены , а второй вызов приведет к ошибке (уже отправленные заголовки).
Классическая ошибка: перенаправление и не exit()
сразу после этого, что может вызвать проблемы с безопасностью.
правило заключается в том, что при переадресации заголовка выведите его прямо после:
if(!$test) { header("Location: somefile.html"); exit; //wont ever run ...some PHP code.... header("Location: anotherfile.html"); }
если вы не поместите exit
есть вероятность, что следующий код может работать.
Да, будет запущен «некоторый PHP-код». Заголовок Location
похож на любой другой заголовок. Он может быть отправлен только в том случае, если скрипт выполнен. Таким образом, любой код между ними, предполагая, что нет выхода, должен быть запущен до того, как заголовок имеет значение.
выполняется другой код.
header («Местоположение: xxx»);
не останавливает выполнение кода. и для браузера может потребоваться некоторое время.
header("Location: http://www.google.com"); $test = "Hi!"; header("Location: http://www.yahoo.com?t=" . $test);
Этот код берет мой браузер: http://www.yahoo.com/?t=Hi !
Выполняется код после header("location")
. Вы должны использовать exit();
если вы этого не хотите 🙂
Перенаправление выполняется напрямую, так что вы, вероятно, не увидите эффект вещей ниже первого заголовка.