PHP File Handling

9. 파일 및 디렉토리 처리 (File and Directory Handling)

파일 열기, 읽기, 쓰기 (Opening, Reading, and Writing Files)

파일 열기 (Opening Files)

파일을 열기 위해 fopen() 함수를 사용합니다. 이 함수는 파일 핸들을 반환하며, 파일이 존재하지 않는 경우 새로 생성할 수 있습니다.

<?php
$filename = "example.txt";
$handle = fopen($filename, "r"); // "r"은 읽기 모드
?>
파일 읽기 (Reading Files)

파일 내용을 읽기 위해 fread() 함수를 사용합니다. 파일을 열 때 반환된 핸들을 이용하여 읽을 수 있습니다.

<?php
$filename = "example.txt";
$handle = fopen($filename, "r");

// 파일 내용 읽기
$file_contents = fread($handle, filesize($filename));
echo $file_contents;

fclose($handle);
?>
파일 쓰기 (Writing Files)

파일에 데이터를 쓰기 위해 fwrite() 함수를 사용합니다. 파일을 열 때 쓰기 모드("w" 또는 "a")로 열어야 합니다.

<?php
$filename = "example.txt";
$handle = fopen($filename, "w");

$data = "Hello, World!";
fwrite($handle, $data);

fclose($handle);
?>

파일 업로드 (File Uploads)

사용자가 파일을 서버로 업로드할 때는 HTML 폼과 PHP 스크립트를 사용하여 처리합니다.

HTML 폼
<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
  Select file to upload:
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="Upload File" name="submit">
</form>

</body>
</html>
PHP 파일 업로드 처리 (upload.php)
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// 파일이 실제 이미지인지 확인
if (isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if ($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}

// 파일이 이미 존재하는지 확인
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}

// 파일 크기 제한 (예: 500KB)
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}

// 특정 파일 형식 허용 (예: JPG, JPEG, PNG, GIF)
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

// 업로드가 가능한지 확인
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file " . htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>

디렉토리 처리 (Directory Handling)

폴더 생성 (Creating Folders)

새로운 디렉토리를 생성하려면 mkdir() 함수를 사용합니다.

<?php
$dir = "uploads/";

// 폴더가 없으면 생성
if (!is_dir($dir)) {
    mkdir($dir);
    echo "Folder created successfully!";
} else {
    echo "Folder already exists!";
}
?>
파일 목록 얻기 (Getting File Lists)

특정 디렉토리의 파일 목록을 얻기 위해 scandir() 함수를 사용합니다.

<?php
$dir = "uploads/";

// 디렉토리의 파일 목록 얻기
$files = scandir($dir);

foreach($files as $file) {
    echo $file . "<br>";
}
?>

위 예제에서는 uploads/ 디렉토리에 있는 모든 파일과 폴더를 리스트업합니다. 디렉토리 처리와 관련된 더 많은 함수와 사용법은 PHP 공식 문서에서 확인할 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *