Вы всегда должны умереть () или выйти () после перенаправления (или, как отметил Марк Б, используйте ignore_user_abort ()), потому что иначе вы не можете точно знать, что произойдет.
Хотянекоторый код будет выполнен после перенаправления расположения заголовка, важно отметить, что не весь код после него обязательно будет выполнен.
В соответствии с вашим примером, yes_value будет равно 5. Но в какой-то момент скриптбудет преждевременно завершено.
Возьмите следующий пример:
session_start();
$_SESSION["some_value"] = 'original value';
header("Location: /index.php/test2");
$start_time = microtime(true);
for($i = 0; $i <= 100000; $i ++)
{
password_hash($i); // slow it down
$_SESSION["some_value"] = $i;
$_SESSION['time'] = microtime(true) - $start_time;
}
$_SESSION['some_value'] = 'finished!';
Если бы все остальные ответы были правильными, вы бы предположили, что $ _SESSION ['some_value'] будет равно 'закончено!'- но я запустил код, и это не тот случай.
Вот мои результаты:
some_value: 174
time: 0.0026998519897461
Пробная версия два:
some_value: 218
time: 0.0033109188079834
Пробная версия три:
some_value: 218
time: 0.0035371780395508
Пробная четверка:
some_value: 174
time: 0.0026431083679199
Пробная пятерка:
some_value: 174
time: 0.0027921199798584
Если я реализую ignore_user_abort (TRUE);в приведенном выше сценарии some_value равно "Закончено!"так что имейте это в виду, если вы собираетесь делать что-то критическое, например, вести журнал или выполнять запросы к базе данных или отправлять электронные письма после перенаправления.