PHP include 경로 에러 및 DOCUMENTROOT 설정 방법
페이지 정보

본문
그누보드 운영 중 파일 include 시 발생하는 failed to open stream 에러의 원인을 진단하고 서버 절대경로 및 DOCUMENT_ROOT 설정으로 해결하는 방법을 안내합니다.
PHP include 경로 에러(failed to open stream) 발생 원인
include나 include_once 등의 명령어로 파일을 호출할 때 [function.include]: failed to open stream: No such file or directory 에러가 발생하는 일반적인 원인은 프로그램이 해당 파일의 경로를 찾지 못했기 때문입니다.
주요 원인 및 배경
- 상대경로 기준 변경: PHP 파일 안에서
require나include를 사용할 때, 호출 전에는 현재 존재하는 파일의 경로를 기준으로 상대경로가 설정되지만, 파일이 인클루드된 이후에는 컴파일된 파일 기준으로 상대경로가 달라져 서브폴더 등으로 이동 시 경로를 잃어버릴 수 있습니다. - 환경변수 인식 문제: 서버 절대경로를 호출하기 위해 환경변수인
$DOCUMENT_ROOT를 사용할 때, 서버 설정상 해당 값을 쓸 수 있도록 설정되어 있지 않으면 변수를 인식하지 못해 경로 에러가 발생합니다.
DOCUMENT_ROOT 환경변수를 이용한 절대경로 include 방법
PHP에서 include 또는 require_once 등의 명령어로 파일을 호출할 때 상대경로 대신 서버 절대경로를 사용하려면 $_SERVER['DOCUMENT_ROOT'] 환경변수를 활용할 수 있습니다.
사용 방법
하위 디렉토리나 다른 경로에서 파일을 안정적으로 호출하려면 다음과 같이 작성합니다.
include $_SERVER["DOCUMENT_ROOT"]."/board/right_body/mobile.php";
또는 더블쿼터(") 문맥 안에서 배열 키를 따옴표 없이 사용할 수도 있습니다.
include "$_SERVER[DOCUMENT_ROOT]/test/assets/header.php";
주의 사항
- 프로그램상에서
$_SERVER['DOCUMENT_ROOT']값을 올바르게 인식하지 못해[function.include]: failed to open stream: No such file or directory에러가 발생하는 경우, 환경 설정에 따라 추가적인 조치가 필요할 수 있습니다. - 구버전 PHP 환경에서는
php.ini파일의register_globals값이Off로 설정되어 있으면$_SERVER['DOCUMENT_ROOT']와 같은 환경변수 인식이 안 될 수 있어 이를On으로 변경하는 방법이 쓰이기도 합니다. - 다만 보안상
register_globals는 가능하면Off로 유지하는 것이 권장되며, 최신 PHP 버전에서는 해당 기능이 완전히 제거되었으므로 구버전 환경에만 국한됩니다.
PHP include 경로 에러 및 DOCUMENT_ROOT 설정 방법
PHP 파일 호출 시 [function.include]: failed to open stream: No such file or directory 에러가 발생하는 원인은 주로 경로를 찾지 못하거나 $DOCUMENT_ROOT 환경변수 값을 제대로 인식하지 못하기 때문입니다.
1. php.ini 설정 변경
환경변수 $DOCUMENT_ROOT 값을 사용할 수 있도록 설정하려면 PHP 설정 파일인 php.ini에서 register_globals 값을 수정합니다.
register_globals = On
- 기존
Off로 설정되어 있는 값을On으로 변경합니다. - 주의사항: 최신 PHP 버전에서는
register_globals기능이 완전히 제거되었으므로 구버전 환경에만 국한되며, 보안상 가능하면Off로 유지하는 것이 좋습니다.
2. Apache 설정 확인 및 웹서버 재시작
php.ini 파일을 수정한 후에는 Apache 설정 파일에서 DocumentRoot 항목이 올바르게 지정되어 있는지 확인합니다.
- Apache 설정 예시:
DocumentRoot "D:/WebServer/homepage" - 설정 변경 후에는 Apache를 재시작해야 설정이 적용됩니다.
3. 적용 후 확인
웹서버 재시작 후 경로 에러(failed to open stream)가 사라지고 파일이 정상적으로 include 되는지 확인합니다.
register_globals 설정 변경의 보안 위험성
register_globals 값을 On으로 설정하여 $DOCUMENT_ROOT와 같은 환경변수나 폼 변수를 전역 변수로 사용할 수 있게 만들면 코드가 정교하지 않을 경우 쉽게 보안 문제가 발생할 수 있습니다.
보안 권장 사항
- 폼 변수 등을 전역 변수로 취급하게 되므로 잠재적인 보안 취약점으로 이어질 수 있습니다.
- 따라서 가능하면
register_globals는Off로 사용하는 것이 권장됩니다.
PHP include 경로 에러 및 DOCUMENT_ROOT 설정 방법
PHP 파일에서 include나 include_once 등의 명령어로 파일을 호출할 때 [function.include]: failed to open stream: No such file or directory 에러가 발생하는 원인과 해결 방법입니다.
1. 발생 원인
프로그램상에서 상대경로가 아닌 서버 절대경로를 사용하기 위해 환경변수인 $DOCUMENT_ROOT를 호출할 때, 해당 값을 사용할 수 있도록 설정되어 있지 않으면 경로를 찾지 못해 에러가 발생합니다.
2. 해결 방법 (php.ini 및 Apache 설정)
- php.ini 파일 수정
- php.ini 파일에서
register_globals값을 찾아서 변경합니다. - 설정 내용:
register_globals = On(기본값Off에서On으로 변경)
- php.ini 파일에서
- Apache 설정 확인
- Apache 설정 파일에서
DocumentRoot항목(예:DocumentRoot D:/WebServer/homepage)이 올바르게 지정되어 있는지 확인합니다.
- Apache 설정 파일에서
- 웹서버 재시작
php.ini파일의 환경 설정을 변경한 후에는 Apache를 재시작해야 설정이 적용됩니다.
3. 주의사항 및 환경별 한계
- 보안 권장:
register_globals를On으로 설정하면 폼 변수를 전역 변수로 사용하여 보안 문제가 쉽게 발생할 수 있으므로, 가능하면Off로 사용하는 것이 좋습니다. - 버전별 적용 범위: 최신 PHP 버전에서는
register_globals기능이 완전히 제거되었으므로, 위 설정 방법은 구버전 환경에만 국한됩니다.
상황별 판단 가이드
| 내 상황 | 선택 기준 | 다음 행동 |
|---|---|---|
구버전 환경에서 $DOCUMENT_ROOT 인식 오류 발생 | php.ini 설정 확인 | register_globals = On으로 수정 후 Apache 재시작 (보안상 Off 권장) |
| 경로 혼용으로 서브폴더에서 파일 호출 실패 | 절대경로 사용 | include $_SERVER['DOCUMENT_ROOT']. '/경로/파일.php';로 수정 |
| 설정 변경 후에도 에러 지속 | 웹서버 설정 확인 | Apache 설정 파일의 DocumentRoot 경로 확인 및 서비스 재시작 |
Q. registerglobals를 On으로 설정해도 DOCUMENTROOT를 인식하지 못합니다.
- 대안: Apache 설정 파일(
httpd.conf등)의DocumentRoot경로가 실제 웹 루트와 일치하는지 확인하십시오. 설정 변경 후에는 반드시 Apache를 재시작해야 합니다.
Q. 최신 PHP 버전에서 register_globals가 제거되었습니다. 대안은 무엇인가요?
- 대안:
register_globals에 의존하지 말고$_SERVER['DOCUMENT_ROOT']를 직접 사용하거나,__DIR__매직 상수를 활용하여 현재 파일 기준의 절대경로를 구성하십시오.
함께 보면 좋은 글
참고자료
기타 참고자료
- stackoverflow.com — PHP include - failed to open stream: No such file - Stack Overflow
- phpschool.com — PHPSCHOOL-Q&A > PHP관련/함수/프레임웍 질문과답변
- compeople.tistory.com — ::WinLux-Compeople::[email protected] :: PHP, Apache 서버에서의 $DOCUMENT_ROOT변수 인식문제
- xively.tistory.com — PHP 함수 호출 시 경로 호출 에러 발생 원인 추측 ( Failed to open stream: No such file or directory in "…
- sajujeong.tistory.com — PHP include 경로 혼용, 이것이 문제였다!
- 이전글그누보드 g4path 변수 미선언 및 capslock.js 오류 해결 방법 26.10.09
- 다음글그누보드 글 작성 시 3~5초 로딩 지연 현상 점검 및 해결 방법 26.10.08
댓글목록
등록된 댓글이 없습니다.