파일시스템 (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()로 정규화한 뒤 처리하면 많은 오류를 피할 수 있어요.
더 알아보기