php header Откуда сразу?

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

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

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

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

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

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

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

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

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

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

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

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