[php] PHP를 활용한 파일 업로드와 파일 이름 중복 처리

파일 업로드는 PHP 웹 개발에서 자주 사용되는 기능입니다. 사용자가 웹 페이지를 통해 파일을 업로드하면, 서버 측에서는 해당 파일을 받아서 저장합니다. 파일을 저장할 때, 만약에 이미 동일한 이름의 파일이 존재한다면 어떻게 처리해야 할까요? 이번 글에서는 PHP를 사용하여 파일 업로드를 구현하고, 파일 이름 중복 시 처리하는 방법에 대해 알아보겠습니다.

1. 파일 업로드 구현

먼저, 파일 업로드를 구현하기 위해 HTML form을 생성해야 합니다. 아래는 파일을 업로드할 수 있는 form의 예시입니다.

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

그리고, 서버 측에서는 업로드 된 파일을 저장하는 PHP 스크립트를 작성해야 합니다. 아래는 파일을 업로드하고 저장하는 간단한 PHP 스크립트 예시입니다.

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $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.";
    }
}
?>

2. 파일 이름 중복 처리

파일 이름이 중복될 경우, 덮어쓰기를 방지하기 위해 새로운 파일 이름으로 저장해야 합니다. 파일의 중복 여부는 file_exists 함수로 확인할 수 있습니다. 만약 파일이 중복되었을 때, 새로운 파일 이름을 생성하여 사용할 수 있습니다.

$uploadOk = 1;
while (file_exists($target_file)) {
    $filename = pathinfo($target_file, PATHINFO_FILENAME);
    $extension = pathinfo($target_file, PATHINFO_EXTENSION);
    $target_file = $target_dir . $filename . '_' . time() . '.' . $extension;
}

위의 예시 코드에서는 파일 이름 뒤에 현재 시간을 붙여서 중복을 피하고 있습니다.

이제 파일 업로드와 파일 이름 중복 처리를 구현하기 위한 기본적인 개념을 이해했습니다. 파일 업로드 기능을 개발할 때, 파일 이름 중복 처리를 고려하여 안정적인 파일 관리가 이루어지도록 구현하는 것이 중요합니다.

참고 자료: