PHP file:// 래퍼란?
PHP에서는 내장 래퍼(wrapper)를 통해 파일 시스템 함수와 함께 다양한 URL 스타일의 프로토콜을 사용할 수 있습니다. 또한 stream_wrapper_register() 함수를 활용하면 개발자가 직접 사용자 정의 래퍼를 만들 수도 있습니다.
PHP의 기본 래퍼는 file://이며, 로컬 파일 시스템을 나타냅니다. 별도의 프로토콜을 명시하지 않으면 PHP 파서는 자동으로 파일 시스템 래퍼로 처리합니다. 즉, fopen(), file_get_contents() 같은 파일 시스템 함수에 전달하는 파일명 인수는 기본적으로 file:// 프로토콜을 따릅니다.
파일 이름이 슬래시(/), 백슬래시(\) 또는 Windows의 드라이브 문자(C:)로 시작하지 않으면, 해당 경로는 현재 디렉터리를 기준으로 하는 상대 경로로 해석됩니다. 다만 fopen()과 file_get_contents() 함수에서는 php.ini의 include_path 지시자에 지정된 경로에서 파일을 검색할 수도 있습니다.
file:// 래퍼의 주요 특징
file:// 래퍼는 다음과 같은 기능을 지원합니다.
- 읽기와 쓰기를 동시에 처리하는 작업
- 디렉터리 생성 및 삭제
- 파일 이름 변경(이동)
또한 file:// 래퍼를 통한 파일 접근은 php.ini 설정의 allow_url_fopen 지시자의 영향을 받지 않습니다. 따라서 allow_url_fopen이 비활성화되어 있어도 로컬 파일에는 제한 없이 접근할 수 있습니다.
파일 경로 표현 예제
파일 이름은 여러 가지 방식으로 표현할 수 있습니다. 각 방식별 예제는 다음과 같습니다.
1. 절대 경로
$file = fopen("C:/xampp/php/test/test.txt", "w");
2. 상대 경로
현재 작업 디렉터리가 C:\xampp\php라고 가정하면, test 하위 디렉터리에서 파일이 열립니다.
$file = fopen("test/test.txt", "w");
3. 현재 디렉터리 기준 경로
현재 디렉터리가 C:\xampp\php\test라고 가정하면, 해당 디렉터리에서 파일이 열립니다.
$file = fopen("test.txt", "w");
4. file:// 프로토콜로 절대 경로 지정
$file = fopen("file:///c:/xampp/php/test/test.txt", "w");
5. file:// 프로토콜로 문서 루트의 파일 지정
$file = fopen("file://localhost/test/test.txt", "w");
정리
file://는 PHP에서 별도 설정 없이 항상 사용할 수 있는 기본 래퍼입니다. 로컬 파일을 다룰 때는 대부분 프로토콜을 명시하지 않아도 되지만, 절대 경로와 상대 경로의 해석 규칙, include_path 검색 동작 등을 정확히 이해해 두면 파일 입출력 관련 오류를 크게 줄일 수 있습니다.