안녕하세요! 그레이해커 월횽입니다. 이번 강의에서는 PHP를 사용하여 파일을 처리하는 방법에 대해 알아봅니다. 파일 읽기 및 쓰기, 파일 업로드 및 다운로드, 파일 시스템 함수, 그리고 디렉토리 처리를 포함한 다양한 파일 작업을 다룹니다.
1. 파일 읽기 및 쓰기
1-1. 파일 읽기
· file_get_contents() 함수
전체 파일 내용을 문자열로 읽어옵니다.
<?php
$filename = 'example.txt';
$content = file_get_contents($filename);
echo $content;
?>
· fopen(), fread(), fclose() 함수
파일을 열고, 파일의 일부 내용을 읽은 후 닫습니다.
<?php
$filename = 'example.txt';
$file = fopen($filename, 'r'); // 읽기 모드로 파일 열기
if ($file) {
$content = fread($file, filesize($filename)); // 파일 내용 읽기
fclose($file); // 파일 닫기
echo $content;
} else {
echo "파일을 열 수 없습니다.";
}
?>
1-2. 파일 쓰기
· file_put_contents() 함수
문자열을 파일에 직접 씁니다. 파일이 없으면 새로 생성합니다.
<?php
$filename = 'example.txt';
$content = 'Hello, world!';
file_put_contents($filename, $content);
?>
· fopen(), fwrite(), fclose() 함수
파일을 열고, 문자열을 파일에 쓴 후 닫습니다.
<?php
$filename = 'example.txt';
$file = fopen($filename, 'w'); // 쓰기 모드로 파일 열기
if ($file) {
fwrite($file, 'Hello, world!'); // 문자열 쓰기
fclose($file); // 파일 닫기
} else {
echo "파일을 열 수 없습니다.";
}
?>
2. 파일 업로드 및 다운로드
2-1. 파일 업로드
· HTML 폼
사용자로부터 파일을 업로드 받을 수 있는 폼을 작성합니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>파일 업로드</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">파일 선택:</label>
<input type="file" id="file" name="file">
<input type="submit" value="업로드">
</form>
</body>
</html>
· PHP 파일 업로드 처리
업로드된 파일을 서버에 저장합니다.
<?php
// upload.php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_FILES['file']) && $_FILES['file']['error'] == 0) {
$uploadDir = 'uploads/';
$uploadFile = $uploadDir . basename($_FILES['file']['name']);
// 디렉토리가 존재하지 않으면 생성
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0777, true);
}
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) {
echo "파일이 성공적으로 업로드되었습니다.";
} else {
echo "파일 업로드에 실패했습니다.";
}
} else {
echo "파일이 선택되지 않았거나 업로드 중 오류가 발생했습니다.";
}
}
?>
2-2. 파일 다운로드
· 파일 다운로드 스크립트
<?php
// download.php
$file = 'path/to/your/file.txt'; // 다운로드할 파일 경로
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
} else {
echo "파일이 존재하지 않습니다.";
}
?>
3. 파일 시스템 함수
3-1. fopen()
· 파일을 열고, 지정한 모드로 작업할 수 있는 핸들을 반환합니다.
$file = fopen('example.txt', 'r');
3-2. fread()
· 열린 파일 핸들에서 데이터를 읽습니다.
$content = fread($file, filesize('example.txt'));
3-3. fwrite()
· 열린 파일 핸들에 데이터를 씁니다.
fwrite($file, '새로운 데이터');
3-4. fclose()
· 열린 파일 핸들을 닫습니다.
fclose($file);
3-5. file_exists(), is_writable(), is_readable()
· 파일의 존재 여부, 쓰기 가능 여부, 읽기 가능 여부를 확인합니다.
if (file_exists('example.txt')) {
if (is_writable('example.txt')) {
echo '파일에 쓸 수 있습니다.';
}
if (is_readable('example.txt')) {
echo '파일을 읽을 수 있습니다.';
}
}
4. 디렉토리 처리
4-1. 디렉토리 생성 및 삭제
· mkdir()
새 디렉토리를 생성합니다.
if (mkdir('new_directory', 0777, true)) {
echo '디렉토리가 생성되었습니다.';
} else {
echo '디렉토리 생성에 실패했습니다.';
}
· rmdir()
빈 디렉토리를 삭제합니다.
if (rmdir('empty_directory')) {
echo '디렉토리가 삭제되었습니다.';
} else {
echo '디렉토리 삭제에 실패했습니다.';
}
4-2. 디렉토리 탐색
· opendir(), readdir(), closedir()
디렉토리 내 파일 및 디렉토리를 읽어옵니다.
$dir = opendir('some_directory');
while (($file = readdir($dir)) !== false) {
echo "파일: $file<br>";
}
closedir($dir);
4-3. 파일 및 디렉토리 삭제
· unlink()
파일을 삭제합니다.
if (unlink('example.txt')) {
echo '파일이 삭제되었습니다.';
} else {
echo '파일 삭제에 실패했습니다.';
}
· 재귀 디렉토리 삭제
디렉토리와 그 안의 모든 파일을 삭제합니다.
function deleteDir($dir) {
if (!file_exists($dir)) {
return false;
}
if (is_file($dir) || is_link($dir)) {
return unlink($dir);
}
foreach (glob(rtrim($dir, '/') . '/*', GLOB_MARK) as $file) {
deleteDir($file);
}
return rmdir($dir);
}
if (deleteDir('some_directory')) {
echo '디렉토리와 그 내용이 삭제되었습니다.';
} else {
echo '디렉토리 삭제에 실패했습니다.';
}
- 이전 수업 목록
'프로그래밍 > PHP' 카테고리의 다른 글
[PHP 수업] 14강 - 객체 지향 프로그래밍 (OOP) (0) | 2024.08.13 |
---|---|
[PHP 수업] 13강 - 데이터베이스 연동 (MySQL) (0) | 2024.08.12 |
[PHP 수업] 11강 - 세션과 쿠키 (0) | 2024.08.08 |
[PHP 수업] 10강 - 폼 처리 및 유효성 검사 (0) | 2024.08.07 |
[PHP 수업] 9강 - 문자열 처리 (0) | 2024.08.06 |