반응형
Web Development · PHP file_get_contents
PHP file_get_contents —
파일 내용을 통째로 한 문자열로 읽기
is_readable로 안전 검사 후 읽기
시작 오늘 분석할 코드
<?php $filename = "test.txt"; if(is_readable($filename)){ $contents = file_get_contents($filename); // 파일 전체 내용을 문자열로 가져옴 print $contents; }else{ print $filename."는 읽어 들일 수 없습니다."; } ?>
두 단계 — 먼저 is_readable로 파일이 존재하고 읽을 권한이 있는지 확인, 그 다음 file_get_contents로 한 번에 통째로 읽어들인다.
용어 용어 정리
file_get_contents()파일 내용을 문자열로 한 번에 반환
is_readable()파일이 존재하고 읽기 가능한지 확인
is_file()파일이 일반 파일인지
file_exists()파일·폴더 존재 여부
URL도 가능http(s):// 도 지원 (allow_url_fopen 설정)
반환값파일 내용 (성공) / false (실패)
대용량 주의파일 전체를 메모리로 → 큰 파일 X
반대file_put_contents — 쓰기
1 "한 번에" 읽는다는 뜻
옛날 방식은 fopen → fread → fclose로 단계가 많았다. file_get_contents는 이 모두를 한 줄로 처리한다.
// 옛 방식 $fp = fopen("test.txt", "r"); $content = fread($fp, filesize("test.txt")); fclose($fp); // 현대 방식 $content = file_get_contents("test.txt");
2 안전 검사 — is_readable
| 함수 | 검사 내용 |
|---|---|
file_exists($f) |
존재 여부 (파일 또는 폴더) |
is_file($f) |
일반 파일인지 (폴더 X) |
is_readable($f) |
존재 + 읽기 권한 |
is_writable($f) |
존재 + 쓰기 권한 |
filesize($f) |
크기 (바이트) |
3 URL도 읽을 수 있다
$json = file_get_contents("https://api.example.com/data"); $data = json_decode($json, true);
외부 API 호출도 가능. 단 php.ini의 allow_url_fopen 옵션이 켜져 있어야 한다 (대부분 기본 ON).
※ 실무에선 cURL이나 Guzzle 같은 라이브러리가 헤더·타임아웃·인증 처리에 더 적합. file_get_contents는 빠른 테스트용.
반응형
4 대용량 파일은 위험
file_get_contents는 파일을 메모리에 통째로 로드한다. 1GB짜리 파일을 읽으면 1GB 메모리를 쓴다.
// 큰 파일은 줄 단위로 읽기 $fp = fopen("big.log", "r"); while (($line = fgets($fp)) !== false) { // 한 줄씩 처리 } fclose($fp); // 또는 SplFileObject foreach (new SplFileObject("big.log") as $line) { // 한 줄씩 }
5 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
| 존재 검사 없이 바로 호출 | 경고 + false 반환 | is_readable 먼저 |
| 상대 경로 의존 | 실행 위치에 따라 못 찾음 | __DIR__ . "/test.txt" |
| 대용량 파일 로드 | 메모리 폭발 | fgets 또는 SplFileObject |
| 인코딩 미고려 | EUC-KR 파일이 깨져 보임 | mb_convert_encoding 활용 |
| 반환 false 무시 | 이후 코드에서 오류 | === false 검사 |
핵심 한 줄 요약
file_get_contents()파일 전체를 한 문자열로 읽기
is_readable()존재 + 권한 검사 (안전)
URL 가능http(s)://도 지원 (allow_url_fopen)
대용량 X메모리 통째 사용 → 큰 파일은 fgets
반환값문자열 / 실패 시 false
__DIR__상대 경로 함정 회피
반대file_put_contents — 쓰기
반응형
'php' 카테고리의 다른 글
| PHP copy — 파일 복사 완전 정리 (0) | 2026.06.16 |
|---|---|
| PHP file_put_contents — 파일에 한 번에 쓰기 완전 정리 (0) | 2026.06.16 |
| PHP checkdate — 날짜 유효성 검사 완전 정리 (0) | 2026.06.16 |
| PHP mktime — 특정 날짜·시각의 타임스탬프 만들기 완전 정리 (0) | 2026.06.16 |
| PHP time — 유닉스 타임스탬프 가져오기 완전 정리 (0) | 2026.06.16 |
왕진 블로그

댓글