PHP 서버 변수 PHPSELF, SCRIPTNAME, REQUESTURI 차이점과 활용
페이지 정보

본문
그누보드 운영 및 개발 시 자주 접하는 PHP 서버 변수들의 기술적 차이를 이해하고, 상황에 맞는 올바른 변수를 선택하여 코드 안정성을 높이는 방법을 안내합니다.
PHP 서버 변수 비교: PHPSELF, SCRIPTNAME, REQUEST_URI
PHP 개발 및 그누보드 운영 시 자주 사용하는 서버 변수들은 비슷해 보이지만, 요청 상황과 서버 설정에 따라 반환하는 값이 다릅니다. 각 변수의 특징과 차이점을 이해하고 용도에 맞게 선택해야 합니다.
1. 주요 변수별 정의 및 특징
$_SERVER['PHP_SELF']: 현재 실행 중인 스크립트의 경로와 파일명을 반환합니다. 도메인을 제외한 경로를 포함하며, 상황에 따라PATH_INFO정보가 포함될 수 있습니다.$_SERVER['SCRIPT_NAME']: 현재 실행 중인 스크립트의 경로와 파일명만 반환합니다. 파라미터나 추가 경로 정보를 포함하지 않아, 자기 자신을 가리키는 링크를 생성할 때 주로 사용합니다.$_SERVER['REQUEST_URI']: 클라이언트가 요청한 전체 URI를 반환합니다. GET 파라미터(예:?foo=bar)를 포함합니다.
2. 요청 시나리오별 반환값 비교
| 시나리오 | PHP_SELF | SCRIPT_NAME | REQUEST_URI |
|---|---|---|---|
http://example.com/test.php | /test.php | /test.php | /test.php |
http://example.com/test.php/foo/bar | /test.php/foo/bar | /test.php | /test.php/foo/bar |
http://example.com/test.php?foo=bar | /test.php | /test.php | /test.php?foo=bar |
3. 환경 및 설정에 따른 주의사항
- 서버 리다이렉션: Apache의
mod_rewrite등을 사용하여 리다이렉션이 발생할 경우,SCRIPT_NAME은 리다이렉트된 대상 파일명을 반환할 수 있습니다. - HTTP 에러 페이지:
ErrorDocument설정으로 404 에러 페이지를 호출할 때,SCRIPT_NAME은 에러 처리용 스크립트 경로를 반환하지만REQUEST_URI는 원래 요청했던 경로를 유지하는 등 차이가 발생합니다. - 보안 권장사항: 그누보드 등 PHP 코드 내에서
$_SERVER변수를 출력하거나 사용할 때는 보안을 위해strip_tags()나htmlspecialchars()함수를 사용하여 태그 제거 및 특수문자 처리를 거치는 것이 안전합니다.
PHP 서버 변수 비교: PHPSELF, SCRIPTNAME, REQUEST_URI
PHP 개발 및 그누보드 운영 시 자주 사용하는 서버 변수들은 비슷해 보이지만, 요청 상황에 따라 반환하는 값이 다릅니다. 각 변수의 특성을 이해하고 용도에 맞게 선택해야 합니다.
1. 주요 변수별 특징
$_SERVER['PHP_SELF']: 현재 실행 중인 스크립트의 경로와 파일명을 반환합니다. URL에 추가적인 경로 정보(PATH_INFO)가 포함되어 있다면 이 정보까지 함께 반환합니다.$_SERVER['SCRIPT_NAME']: 현재 실행 중인 스크립트의 경로와 파일명만 반환합니다. 파라미터나 추가 경로 정보를 포함하지 않아 가장 안정적입니다.$_SERVER['REQUEST_URI']: 클라이언트가 요청한 전체 URI를 반환하며, GET 파라미터(예:?foo=bar)를 포함합니다.
2. 시나리오별 반환 값 비교
요청 URL이 http://example.com/test.php/foo/bar인 경우:
- PHP_SELF:
/test.php/foo/bar - SCRIPT_NAME:
/test.php
요청 URL이 http://example.com/test.php?foo=bar인 경우:
- SCRIPT_NAME:
/test.php - REQUEST_URI:
/test.php?foo=bar
3. 자기 자신을 가리키는 링크 생성 시 권장 사항
자기 자신을 호출하거나 폼(form)의 action 경로를 설정할 때는 $_SERVER['SCRIPT_NAME']을 사용하는 것이 가장 안전합니다. 이는 파라미터나 불필요한 경로 정보를 제외한 순수 스크립트 경로만을 반환하기 때문입니다.
4. 주의사항 및 환경별 차이
- 서버 리다이렉션 및 에러 페이지: Apache의
mod_rewrite나 커스텀 에러 페이지(ErrorDocument) 설정 시, 변수 값이 의도와 다르게 변경될 수 있습니다. 예를 들어, IIS에서 커스텀 에러 페이지를 사용하면SCRIPT_NAME이 에러 페이지 경로를 가리킬 수 있습니다. - 보안: 그누보드 등 PHP 코드에서
$_SERVER변수를 출력하거나 사용할 때는htmlspecialchars등을 사용하여 XSS(교차 사이트 스크립팅) 공격을 방지하는 처리가 필요합니다.
서버 리다이렉션 및 에러 페이지 설정 시 변수 값 변화
서버 설정(Apache mod_rewrite, ErrorDocument 등)이 적용된 환경에서는 요청된 URL과 실제 실행되는 스크립트 경로가 달라질 수 있어, 서버 변수 값도 일반적인 상황과 다르게 반환됩니다.
1. Apache mod_rewrite 리다이렉션 시
서버 측 리다이렉션이 동작하면 SCRIPT_NAME은 원래 요청한 파일이 아닌, 리다이렉트된 대상 스크립트의 경로를 반환합니다.
- 요청 URL:
http://example.com/test.php REQUEST_URI:/test.php(원래 요청한 경로 유지)SCRIPT_NAME:/test2.php(리다이렉트된 실제 실행 스크립트 경로)
2. 커스텀 404 에러 페이지 설정 시
ErrorDocument 404 /404error.php와 같이 에러 페이지를 지정한 경우, 서버 종류에 따라 변수 값이 다음과 같이 달라집니다.
- Apache 환경
REQUEST_URI:/test.php(사용자가 원래 요청했던 경로)SCRIPT_NAME:/404error.php(실제로 실행된 에러 처리 스크립트 경로)
- IIS 환경
SCRIPT_NAME:/404error.phpREQUEST_URI:/404error.php?404;http://example.com/test.php(에러 페이지 경로와 함께 원래 요청 정보가 쿼리 스트링 형태로 포함됨)
3. 운영 시 주의사항
- 경로 의존성: 리다이렉션이나 에러 페이지 환경에서는
SCRIPT_NAME이 실제 실행 파일 경로를 가리키므로, 원래 요청한 주소를 추적해야 하는 로직에서는REQUEST_URI를 사용해야 합니다. - 테스트 필수: 서버 설정(Apache, IIS 등)에 따라 변수 값이 생략되거나 다르게 제공될 수 있으므로, 특정 환경에서 코드를 배포하기 전
var_dump($_SERVER)등을 통해 실제 반환값을 확인하는 과정이 필요합니다.
PHP 서버 변수 활용 가이드
그누보드 운영 및 개발 시, 상황에 맞는 서버 변수를 선택하여 경로 오류나 보안 문제를 예방할 수 있습니다.
| 내 상황 | 우선할 판단 | 다음 행동 |
|---|---|---|
| 자기 자신을 호출하는 링크/폼 생성 | 경로 안정성(파라미터 제외) | $_SERVER['SCRIPT_NAME'] 사용 |
| 파라미터가 포함된 전체 주소 필요 | 전체 요청 정보 유지 | $_SERVER['REQUEST_URI'] 사용 |
| 리다이렉션/에러 페이지 환경 | 서버 설정에 따른 값 변화 확인 | var_dump($_SERVER)로 실제 반환값 테스트 |
| 사용자 입력/서버 변수 출력 | XSS 보안 위협 방지 | htmlspecialchars()로 정제 후 출력 |
실전 FAQ
Q: PHP_SELF와 SCRIPT_NAME은 항상 같은 값을 반환하나요?
A: 아닙니다. URL 뒤에 추가 경로 정보(PATH_INFO)가 붙는 경우 PHP_SELF는 이를 포함하지만, SCRIPT_NAME은 순수 스크립트 경로만 반환합니다. 따라서 자기 자신을 가리키는 링크를 만들 때는 경로가 변하지 않는 SCRIPT_NAME이 더 안전합니다.
Q: 서버 리다이렉션(mod_rewrite) 사용 시 변수 값이 달라지는 이유는 무엇인가요?
A: 서버 설정에 의해 실제 실행되는 파일이 변경될 경우 SCRIPT_NAME은 리다이렉트된 대상 스크립트 경로를 가리키게 됩니다. 원래 사용자가 요청한 주소를 유지해야 하는 로직이라면 REQUEST_URI를 사용해야 합니다.
Q: 그누보드 코드에서 $_SERVER 변수를 사용할 때 주의할 점은 무엇인가요?
A: $_SERVER 변수는 사용자의 요청 정보를 담고 있어 그대로 출력하면 XSS 공격에 취약합니다. 그누보드 소스 내에서 $_SERVER['HTTP_HOST'] 등을 출력할 때처럼 반드시 htmlspecialchars() 함수를 거쳐 특수 문자를 처리해야 합니다.
함께 보면 좋은 글
- PHP mysqlfetcharray와 mysqlfetchobject 차이점과 그누보드 레거시 코드 적용법
- PHP urlencode와 rawurlencode 함수의 차이점과 그누보드 적용 가이드
- PHP MySQL 데이터 패치 함수 비교: mysqlfetchrow와 mysqlfetcharray 차이점과 올바른 사용법
참고자료
기타 참고자료
- 이전글그누보드 회원 탈퇴와 삭제 처리 메커니즘 분석 26.10.06
- 다음글SQL 집계 함수(SUM, COUNT 등) 사용법 및 실무 활용 가이드 26.10.05
댓글목록
등록된 댓글이 없습니다.