PHP 에서 $_SERVER(서버변수) PHP_SELF SCRIPT_NAME REQUEST_URI 차이?

홈페이지 루트에 test.php 를 접근했을 경우 아래와 같이 똑같은 변수가 있다.
    $_SERVER['REQUEST_URI'] => /test.php
    $_SERVER['SCRIPT_NAME'] => /test.php
    $_SERVER['PHP_SELF'] => /test.php
 SCRIPT_NAME  과 PHP_SELF 는 기본적으로 같다고 보면 좋을 것 같다.

Example 1. 요청된 URL 이 파일이름을 포함할때다음과 같을때:
http://example.com/test.php/foo/bar
[REQUEST_URI] => /test.php/foo/bar
[PHP_SELF] => /test.php/foo/bar
[SCRIPT_NAME] => /test.php


Example 2. REQUEST_URI 는 파라미터를 포함하고, SCRIPT_NAME, PHP_SELF는 파라미터를 포함하지 않는다.:
http://example.com/test.php?foo=bar
[REQUEST_URI] => /test.php?foo=bar
[PHP_SELF] => /test.php
[SCRIPT_NAME] => /test.php


Example 3. 서버측 리다이렉션이 동작했을 때 (for example mod_rewrite on apache):
웹브라우저 : http://example.com/test.php
실제서버경로 : /htdocs/test2.php
[REQUEST_URI] => /test.php
[PHP_SELF] => /test2.php
[SCRIPT_NAME] => /test2.php


Example 4. 브라우저에서 없는URL을 요청할 경우 404 Error 페이지를 보여줄때 REQUEST_URI 는 클라이언트의 요청주소를 알수있다.
Using apache directive ErrorDocument 404 /404error.php
http://example.com/test.php
[REQUEST_URI] => /test.php
[PHP_SELF] => /404error.php
[SCRIPT_NAME] => /404error.php


** 관련 레퍼런스 : https://stackoverflow.com/a/326331

댓글 없음:

댓글 쓰기