제공 :
한빛 네트워크
저자 : Ally MacDonald
역자 : 이아름
원문 :
Respond and redirect with PHP
편집자 주 : David Sklar와 Adam Trachtenberg가 집필한 PHP Cookbook 3판에서 발췌했습니다. 이미 PHP에 익숙한 사람들을 위해 PHP Cookbook은 일상적인 작업에서 일어나는 특정한 문제들을 해결하는 방법을 제시합니다. 다른 프로그래밍 언어를 사용했던 프로그래머는 PHP에서 이메일을 보내거나 JSON을 파싱하는 것과 같은 특정한 일을 어떻게 해내야하는지 다른 언어로는 수행하는 방법을 이미 알고 있을 것입니다. 코드가 어떤 방법과 이유로 작동하는지 자체적인 방안으로 간단히 문제-해결-논의 순으로 되어있습니다.
PHP Cookbook은 PHP 개발자들에게 PHP 핵심 업데이트를 위한 중요한 정보, 특히 데이터 처리, 웹 서비스, 국제화, 데이터베이스 접근, 보안과 테스트로 무장되어 있습니다. 발췌한 내용은 웹 기반에 초점을 맞췄으며, HTTP 상태 코드를 설정하는 것을 설명하고 어떻게 사용자가 요청한 다른 웹페이지로 넘겨주는지 알려줍니다. 이 챕터의 일부분은 발췌의 목적으로 편집되고 요약되었습니다.
1. 특정 HTTP 상태 코드 보내기
문제
당신은 HTTP 상태 코드를 명확하게 설정하길 원합니다. 예를 들어, 사용자가 권한이 없는 페이지를 보려하거나 페이지가 존재하지 않을 때 상태 코드가 나타나길 원합니다.
해결
응답을 설정할 때 http_response_code(?)를 사용합니다.
논의
당신의 웹 서버는 PHP에 의해 처리되어 대부분 페이지에서 HTTP 상태코드 200 (성공)을 반환합니다. 그러나 당신은 광범위한 상태 코드들, 또는 응답 코드들을 사용해야 할 수도 있습니다.
인기 있는 몇 가지 코드는 스스로 방법을 얻을 수 있습니다. 다른 페이지로 넘겨질 때, 당신은 302 (임시 이동) 상태코드를 전송하기를 원합니다. 그것은 “다른 위치로 넘겨주기“로 덮어집니다. 사용자가 페이지를 보는 것을 허가받지 못했다면, 당신은 401 (권한 없음)을 전송합니다.
하지만 항상 조건부 GET 방식에 의하여 304 (수정되지 않음)이 전송됩니다. 이것은 누군가가 당신의 사이트를 폴링하고 새로 개선할 것이 없다고 알려주는데 사용될 수 있습니다.
또는 악명 높은 404 (찾을 수 없음)는 페이지가 존재하지 않을 때 전송됩니다. 보통 이것은 당신의 웹서버에서 처리됩니다. 하지만 당신이 데이터베이스 안의 정보에 근거하여 URL과 응답을 처리하는 경우를 제외한, 당신이 디스크에서 물리적으로 파일이 저장되지 않은 곳에 동적 URL이 지원되길 원한다면, 그러면 당신은 누군가 인식 불가능한 URL을 불러올 때 이것을 스스로 처리해야할 필요가 있습니다.
워드프레스는 카테고리나 날짜(예, /category/php/ or /2014/11/03/)에 근거한 URL에 응답하는 매우 좋은 예입니다. 이런 경우에 누군가 카테고리나 포스트에 새로운 데이터를 추가할 때마다 워드프레스는 패턴에 맞는 URL의 요청, 심지어 실제로 파일이 위치하지 않더라도 자동으로 응답 할 수 있습니다.
http_response_code() 때문에 당신은 상태 코드 번호를 제공하고, PHP는 상태 표시줄을 올바르게 처리합니다. 204 (콘텐츠 없음)을 포함한 일부 상태 코드들은 HTTP 명세상에서 메시지 바디를 제공하면 안 됩니다. 이런 경우에 exit()를 전송하여 스크립트를 즉시 중단하는 것이 최선입니다.
만약 당신이 PHP 5.3에서 막혀있다면, header( )를 사용하고 세 번째 파라미터에 상태 코드를 사용하는 것을 건너뛰세요.
참고
HTTP 1.1 사양의 상태 코드 설명서 : http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
2. 다른 위치로 넘겨주기
문제
당신은 사용자에게 자동으로 새로운 URL을 보내길 원합니다. 예를 들어, 폼 데이터를 성공적으로 저장한 뒤 당신은 유저에게 데이터가 저장되었는지 확인하는 페이지로 넘겨주길 원합니다.
해결
어떤 결과가 출력되기 전에 header()를 사용하여 위치 헤더와 함께 새로운 URL을 보낸 뒤, exit()를 불러오면 아무것도 출력되지 않습니다.
논의
예제 1-1에서 새 페이지로 변수를 전달하려면, URL 문자열 쿼리가 포함되어 있어야 합니다.
[예제 1-1] 문자열 변수를 넘겨주기
넘겨주는 URL은 반드시 프로토콜과 호스트이름이 포함되어있어야 합니다. 단지 경로이름만으로는 할 수 없습니다. 예제 1-2는 좋은 경로 헤더와 나쁜 경로 헤더를 보여줍니다.
[예제 1-2] 좋은 그리고 나쁜 경로 헤더
GET 방식으로 검색된 사용자를 넘겨주는 URL입니다. 당신은 POST 방식을 통해 검색된 사용자를 넘겨줄 수 없습니다. 만일 자바스크립트가 있다면, 당신은 자동적으로 제출받은 폼에 의하여 생성된 POST 방식을 경유하는 것처럼 보이게 할 수 있습니다. 자바스크립트를 사용하는 브라우저가 예제 1-3에 있는 페이지를 받으면, 그것은 즉시 POST 방식으로 폼에 포함될 것입니다.
[예제 1-3] 전송된 폼을 통하여 넘겨주기
html