PHP의 즉각적인 리디렉션
header 함수를 사용하여 수행된
리디렉션은 이 함수가 호출되는 순간에
발생하지 않습니다. PHP 자체는 리디렉션을
수행하지 않으며, 브라우저에 해당하는
HTTP 헤더만 전송하기 때문입니다.
이는 PHP가 스크립트 전체를 끝까지 실행한 후에야 리디렉션이 발생한다는 뜻입니다. 이로 인해 다양한 부작용이 발생할 수 있습니다.
예를 들어, 다음 코드에서는 리디렉션 또는 데이터베이스 쿼리를 수행하려고 합니다. 그러나 리디렉션 명령이 있었더라도 데이터베이스 쿼리는 실행됩니다:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // 리디렉션 시에도 실행됨!
?>
이런 문제를 방지하려면
리디렉션 후 즉시 die 함수를
호출해야 합니다. 이 함수는 스크립트 실행을
즉시 종료시켜 리디렉션이 바로 발생하도록
합니다:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
여러분의 코드에서 어떤 부작용을
재현해 보세요. 그런 다음
die 함수를 사용하여
수정하세요.