프로그래밍/PHP

[PHP 수업] 12강 - 파일 처리

월횽 2024. 8. 9. 06:30
728x90
반응형
SMALL

안녕하세요! 그레이해커 월횽입니다. 이번 강의에서는 PHP를 사용하여 파일을 처리하는 방법에 대해 알아봅니다. 파일 읽기 및 쓰기, 파일 업로드 및 다운로드, 파일 시스템 함수, 그리고 디렉토리 처리를 포함한 다양한 파일 작업을 다룹니다.

 

 

1. 파일 읽기 및 쓰기

 

1-1. 파일 읽기

· file_get_contents() 함수

전체 파일 내용을 문자열로 읽어옵니다.

<?php
$filename = 'example.txt';
$content = file_get_contents($filename);
echo $content;
?>

 

728x90

· 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'));

 

SMALL

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 '디렉토리 삭제에 실패했습니다.';
}

 

 

 

- 이전 수업 목록

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST