php header Местоположение немедленно? - PullRequest
4 голосов
/ 27 августа 2011

Почему заголовок Location не перенаправляет страницу сразу? Он всегда выполняет весь процесс перед перенаправлением?

Я приведу пример:

header('Location:http://www.php.net');
$f = fopen('demo.txt','w+');
fwrite($f,'Test');
fclose($f);

Он всегда генерирует файл TXT перед перенаправлением на http://www.php.net.

Ответы [ 3 ]

10 голосов
/ 27 августа 2011

Ну, header() просто отправляет определенный заголовок в браузер.PHP все еще продолжает запускать скрипт после этого.Если вы не хотите останавливать выполнение сценария, просто используйте die; или exit; - он прекратит обработку сценария в дальнейшем.

2 голосов
/ 27 августа 2011

Это потому, что функция header() не перенаправляет, она отправляет заголовок.Браузер может (теоретически) полностью игнорировать его и продолжить анализ страницы.Если вы хотите, чтобы скрипт не обрабатывался после отправки заголовка, сразу же после * запускайте die() или exit().

1 голос
/ 27 августа 2011

Почему заголовок Location не перенаправляет страницу сразу?

Только потому, что он вообще ничего не перенаправляет. Это браузер, который будет тормозить текущее соединение (вызывая остановку скрипта), чтобы запросить другую страницу. И есть задержка в сети.

Он всегда выполняет весь процесс перед перенаправлением?

Не всегда. Это просто не гарантировано.

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

с mod_php вам понадобится ignore_user_abort(), а с php-fpm fastcgi_finish_request‎(), чтобы гарантировать полное выполнение скрипта.

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