PHP에서 파일을 다룰 때, 데이터를 파일에 저장하는 작업이 필요합니다.
예를 들어, 로그 파일 작성, 사용자 입력 저장, JSON 데이터 저장, 설정 파일 생성 등의 작업에서 사용됩니다.
이러한 기능을 수행하는 대표적인 함수가 바로 file_put_contents() 입니다.
이 글에서는 PHP file_put_contents() 함수의 사용법, 다양한 활용 예제, fwrite() 및 file_get_contents()와의 차이점, 유용한 팁과 주의사항을 체계적으로 정리하겠습니다. 🚀
1. file_put_contents() 함수란?
✅ 기본 문법
int|false file_put_contents(string $filename, mixed $data, int $flags = 0, resource $context = null)
✅ 매개변수 설명
매개변수 설명
$filename | 데이터를 저장할 파일 경로 |
$data | 파일에 저장할 데이터 (문자열, 배열, 스트림 등 가능) |
$flags (선택) | 저장 옵션 (FILE_APPEND, LOCK_EX 등) |
$context (선택) | 스트림 컨텍스트 (기본값 null) |
✅ 반환값
- 파일에 저장된 바이트 수 반환
- 실패 시 false 반환
2. file_put_contents() 기본 예제
🔹 파일에 문자열 저장
<?php
file_put_contents("example.txt", "Hello, PHP!");
?>
➡ example.txt 파일을 생성하고 "Hello, PHP!"를 저장.
🔹 기존 내용 덮어쓰기
<?php
file_put_contents("example.txt", "New Content");
?>
➡ 기존 "Hello, PHP!"가 "New Content"로 완전히 덮어쓰기됨.
🔹 기존 파일에 내용 추가 (FILE_APPEND 옵션)
<?php
file_put_contents("example.txt", "\nAppended Text", FILE_APPEND);
?>
➡ 기존 내용 끝에 \nAppended Text가 추가됨.
🔹 파일 잠금 (LOCK_EX 옵션)
<?php
file_put_contents("example.txt", "Safe Write", LOCK_EX);
?>
➡ 여러 프로세스가 동시에 접근하는 경우를 방지하려면 LOCK_EX 사용.
3. file_put_contents()의 실용적인 활용 예제
🔹 1) 로그 파일 작성
<?php
$logMessage = date("[Y-m-d H:i:s]") . " 로그 메시지\n";
file_put_contents("app.log", $logMessage, FILE_APPEND | LOCK_EX);
?>
➡ app.log 파일에 새 로그를 추가하며, 동시에 파일 잠금.
🔹 2) 사용자 입력 저장
<?php
$userInput = "사용자가 입력한 데이터";
file_put_contents("input.txt", $userInput);
?>
➡ 사용자 입력을 파일에 저장하여 데이터를 보관.
🔹 3) JSON 데이터 저장
<?php
$data = ["name" => "Alice", "age" => 25];
$jsonData = json_encode($data, JSON_PRETTY_PRINT);
file_put_contents("data.json", $jsonData);
?>
➡ JSON 데이터를 data.json 파일에 저장.
🔹 4) 기존 파일에 배열 데이터 추가
<?php
$filename = "data.txt";
$newData = "새로운 데이터\n";
// 기존 데이터 가져오기
$oldData = file_exists($filename) ? file_get_contents($filename) : "";
// 새로운 데이터 추가
file_put_contents($filename, $oldData . $newData);
?>
➡ 기존 데이터를 유지하면서 새로운 데이터 추가.
🔹 5) 설정 파일(config.ini) 저장
<?php
$config = [
"database" => "mysql",
"host" => "localhost",
"user" => "root",
"password" => "1234"
];
$iniContent = "";
foreach ($config as $key => $value) {
$iniContent .= "$key = \"$value\"\n";
}
file_put_contents("config.ini", $iniContent);
?>
➡ 설정 파일을 동적으로 생성 가능.
4. file_put_contents() vs fwrite() 차이점
함수 설명
file_put_contents() | 간단한 파일 쓰기 (fopen() 없이 사용 가능) |
fwrite() | 파일을 여러 번 나누어 쓸 수 있음 (fopen() 필요) |
✅ 예제: file_put_contents() vs fwrite()
<?php
// file_put_contents 사용
file_put_contents("example.txt", "Hello, World!");
// fwrite 사용
$handle = fopen("example.txt", "w");
fwrite($handle, "Hello, World!");
fclose($handle);
?>
➡ file_put_contents()는 더 간단한 코드로 같은 작업 수행 가능.
5. file_put_contents() 사용 시 주의할 점
✅ 파일이 존재하지 않으면 자동 생성됨
<?php
file_put_contents("newfile.txt", "자동 생성 파일");
?>
➡ newfile.txt가 없으면 자동으로 생성됨.
✅ 파일이 읽기 전용이면 오류 발생
<?php
file_put_contents("/etc/readonly.txt", "데이터"); // 권한 오류 발생 가능
?>
➡ 파일이 읽기 전용(chmod 444)이면 false 반환.
✅ 대용량 파일 처리 시 메모리 이슈 발생 가능
<?php
$data = str_repeat("Large Data ", 1000000);
file_put_contents("large.txt", $data);
?>
➡ 대용량 데이터 저장 시 메모리 사용량이 많아질 수 있음.
✅ 디렉토리 경로가 없으면 오류 발생
<?php
file_put_contents("uploads/test.txt", "Test Data"); // "uploads" 폴더가 없으면 실패
?>
➡ uploads 디렉토리가 없으면 파일 생성 실패.
➡ 사전에 mkdir("uploads", 0777, true);를 사용하여 디렉토리 생성 필요.
✅ 웹에서 접근 가능한 파일 저장 시 보안 고려
<?php
file_put_contents("uploads/user_data.php", "<?php echo 'Hello'; ?>");
?>
➡ 사용자가 업로드한 파일이 .php 등의 실행 파일이면 보안 위험.
6. file_put_contents() 활용 팁
✅ 파일 저장 전 디렉토리 생성
<?php
$dir = "logs";
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
}
file_put_contents("$dir/log.txt", "로그 메시지", FILE_APPEND);
?>
✅ HTML 파일 생성 및 저장
<?php
$html = "<html><body><h1>Hello, World!</h1></body></html>";
file_put_contents("index.html", $html);
?>
✅ 기존 파일을 백업한 후 저장
<?php
$file = "data.txt";
if (file_exists($file)) {
copy($file, "backup_" . date("Ymd_His") . ".txt");
}
file_put_contents($file, "새로운 데이터");
?>
➡ 기존 파일을 자동으로 백업한 후 저장.
7. 결론
PHP의 file_put_contents() 함수는 파일에 데이터를 저장하는 가장 간편한 함수입니다.
이를 활용하면 로그 파일 생성, 사용자 데이터 저장, 설정 파일 관리, JSON 데이터 저장 등 다양한 작업을 효율적으로 수행할 수 있습니다.
📌 핵심 요약
✔️ file_put_contents()는 파일을 생성하거나 덮어쓰는 함수
✔️ 기존 내용 유지하려면 FILE_APPEND 사용
✔️ 웹 서버에서 파일 저장 시 보안 문제 고려 필요
✔️ 디렉토리가 없으면 파일 저장 전에 mkdir()로 생성해야 함
이제 file_put_contents()를 활용하여 더욱 효율적인 PHP 개발을 해보세요!
'💻 자주 쓰는 PHP 함수' 카테고리의 다른 글
[PHP 함수] array_values() 함수로 배열 다루기 (14) | 2025.03.25 |
---|---|
[PHP 함수] file_get_contents()로 웹 페이지 가져오기 (21) | 2025.03.24 |
[PHP 함수] array_key_exists() 함수 사용 가이드 (18) | 2025.03.23 |
[PHP 함수] array_keys() 함수 사용하기 (10) | 2025.03.23 |
[PHP 함수] strlen() 함수로 문자열의 길이를 구하기 (34) | 2025.03.22 |