웹 게시판의 글 삭제 기능을 구현하고 있었다.
해당 게시글의 삭제 URL로 저자가 아닌 사람이 접속한 경우 로그인 페이지나 INDEX 페이지로 REDIRECT
시키려고 하는데, 중간에 header()문이 있더라도 게시글 삭제가 진행되었다.
발생한 문제는 header()
뒤에 바로 exit()
를 호출함으로써 해결할 수 있었다.
header()
header(string $header, bool $replace = true, int $response_code = 0): void
raw HTTP header
(가공하지 않은 header
)를 전송하기 위해 사용된다.header()
함수 위에 include, require
로 가져온 코드에 공백이 존재한다면 에러가 발생한다.내가 사용하는 것은 redirect
를 하는 것인데, 매개변수에 "Location: ..."
을 넣어주면 된다.
이때 스크립트가 종료되지 않고 실행되어 내가 의도하지 않게 동작하게 되었다. 이를 방지하기 위에 exit()
함수를 이용했다.
exit()
exit(string $status = ?): void
exit(int $status): void
script
의 실행을 모두 terminate(종료)
한다Shutdown functions(종료 함수)
나 object destructors(객체 소멸자)
는 계속 실행된다.exit()
함수를 사용해서 header()
호출 후 뒤의 스크립트는 실행되지 않게 할 수 있었다.
exit(header('Location: ../index.php?msg=wrong_approach'));
header()
를 호출하면 그 자리에서 바로 redirect
하는 것이 아닌, 뒤에 존재하는 코드도 실행한다.
코드 마지막에 header()
로 redirect
하는 것은 상관 없지만, header()
호출 후 코드가 존재한다면 header()
바로 뒤에 exit()
를 호출해서 남은 코드가 실행되는 것을 방지하도록 하자.