파일시스템

파일시스템 (Filesystem)

PHP에서 파일과 디렉터리를 다루는 데 쓰는 핵심 확장이에요. 파일 열기·읽기·쓰기부터 권한, 링크, 임시 파일, 업로드 처리까지 파일시스템과 관련된 거의 모든 함수가 이 한 곳에 모여 있습니다.

출처: PHP: Filesystem - Manual

본문

이 확장을 빌드하는 데 외부 라이브러리는 필요 없어요. 다만 Linux에서 PHP가 LFS(large files, 대용량 파일)를 지원하길 원한다면 최신 glibc가 필요하고, PHP를 다음 컴파일러 플래그와 함께 컴파일해야 합니다.

-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

이렇게 하면 2GB를 넘는 파일도 안정적으로 다룰 수 있어요.

파일시스템 함수

파일시스템 함수는 할 일에 따라 성격이 확연히 갈리기 때문에, 자주 쓰는 것들부터 살펴볼게요.

파일 열기·읽기·쓰기

함수 설명
fopen 파일 또는 URL 열기
fclose 열린 파일 포인터 닫기
fread 바이너리 세이프 파일 읽기
fwrite 바이너리 세이프 파일 쓰기
fputs fwrite의 별칭
file 파일 전체를 배열로 읽음
file_get_contents 파일 전체를 문자열로 읽음
file_put_contents 파일에 데이터 쓰기
readfile 파일 출력
fgetc 파일 포인터에서 문자 가져옴
fgets 파일 포인터에서 줄 가져옴
fgetss 파일 포인터에서 줄을 가져와 HTML 태그 제거
fgetcsv 파일 포인터에서 줄을 가져와 CSV 필드로 파싱
fputcsv CSV로 포맷해 파일 포인터에 쓰기
fscanf 형식에 따라 파일에서 입력 파싱
fpassthru 파일 포인터의 나머지 데이터 모두 출력
fdatasync 데이터(메타데이터 제외)를 파일로 동기화
fsync 변경 사항(메타데이터 포함)을 파일로 동기화
fflush 출력을 파일로 플러시

파일 포인터 위치 이동·크기

함수 설명
fseek 파일 포인터에서 위치 이동
ftell 파일 읽기·쓰기 포인터의 현재 위치 반환
rewind 파일 포인터 위치 되감기
feof 파일 포인터가 끝(EOF)인지 검사
ftruncate 파일을 주어진 길이로 잘라냄

파일·디렉터리 존재/속성 검사

함수 설명
file_exists 파일 또는 디렉터리 존재 여부
is_dir 파일명이 디렉터리인지
is_file 파일명이 일반 파일인지
is_link 파일명이 심볼릭 링크인지
is_executable 파일명이 실행 가능한지
is_readable 파일이 존재하고 읽기 가능한지
is_writable 파일명이 쓰기 가능한지
is_writeable is_writable의 별칭
is_uploaded_file 파일이 HTTP POST로 업로드됐는지
filesize 파일 크기 가져옴
filetype 파일 타입 가져옴
fileatime 파일의 마지막 접근 시각 가져옴
filectime 파일의 inode 변경 시각 가져옴
filemtime 파일의 수정 시각 가져옴
filegroup 파일 그룹 가져옴
fileinode 파일 inode 가져옴
fileowner 파일 소유자 가져옴
fileperms 파일 권한 가져옴
stat 파일에 대한 정보 반환
lstat 파일 또는 심볼릭 링크에 대한 정보 반환
clearstatcache 파일 상태 캐시 지우기

경로·이름 처리

함수 설명
basename 경로의 마지막 이름 요소 반환
dirname 상위 디렉터리의 경로 반환
pathinfo 파일 경로에 대한 정보 반환
realpath 정규화된 절대 경로 이름 반환
realpath_cache_get realpath 캐시 항목 가져옴
realpath_cache_size realpath 캐시 크기 가져옴
glob 패턴과 일치하는 경로명 찾기
fnmatch 패턴에 대해 파일명 매칭

디렉터리·파일 생성/변경/삭제

함수 설명
chgrp 파일 그룹 변경
chmod 파일 모드 변경
chown 파일 소유자 변경
mkdir 디렉터리 생성
rmdir 디렉터리 제거
unlink 파일 삭제
delete unlink 또는 unset 참고
copy 파일 복사
rename 파일 또는 디렉터리 이름 변경
link 하드 링크 생성
symlink 심볼릭 링크 생성
readlink 심볼릭 링크의 대상 반환
linkinfo 링크에 대한 정보 가져옴
lchgrp 심볼릭 링크의 그룹 소유권 변경
lchown 심볼릭 링크의 사용자 소유권 변경
touch 파일의 접근 및 수정 시각 설정
umask 현재 umask 변경
tempnam 고유한 파일 이름으로 파일 생성
tmpfile 임시 파일 생성

잠금·프로세스·업로드

함수 설명
flock 이식 가능한 조언적(advisory) 파일 잠금
popen 프로세스 파일 포인터 열기
pclose 프로세스 파일 포인터 닫기
move_uploaded_file 업로드된 파일을 새 위치로 이동

설정 파일 파싱

함수 설명
parse_ini_file 설정 파일 파싱
parse_ini_string 설정 문자열 파싱

기타

함수 설명
disk_free_space 파일시스템 또는 디스크 파티션의 사용 가능 공간 반환
disk_total_space 파일시스템 또는 디스크 파티션의 총 크기 반환
diskfreespace disk_free_space의 별칭
set_file_buffer stream_set_write_buffer의 별칭

파일시스템 작업에서 가장 자주 겪는 함정은 상대 경로와 절대 경로의 혼동, 그리고 권한 때문에 생기는 is_readable()·is_writable()의 예상 밖의 결과예요. 경로를 다룰 땐 realpath()로 정규화한 뒤 처리하면 많은 오류를 피할 수 있어요.

더 알아보기