PHP – File Upload

Với PHP việc upload files rất đơn giản.

Config file “php.ini”

Đầu tiên, phải đảm bảo file php.ini được cấu hình để cho phép tải file lên.

Tìm trong file php.ini dòng file_uploads, và set nó thành ON. Thông thường đây là cấu hình mặc định.

file_uploads = On

Tạo HTML Form

Tiếp theo, tạo form HTML cho phép người dùng chọn tệp hình ảnh mà họ muốn tải lên:

<!DOCTYPE html>
<html>
<body>

<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>

</body>
</html>

Một số lưu ý:

Form có method=”post”

Form cần thêm thuộc tính sau enctype=”multipart/form-data”

1 input để chọn file với thuộc tính type=”file”. Nó sẽ hiển thị thành button để người dùng chọn file.

Dữ liệu submit được gửi đến file “upload.php”, chúng ta sẽ tạo ở bước tiếp theo.

Tạo script PHP để upload file

File “upload.php” có nội dung như sau

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
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;
    }
}
?>

$target_dir = “uploads/” : Thư mục lưu file upload.

$target_file : Đường dẫn tập tin tải lên.

$uploadOk=1 : Kết quả upload, sẽ được sử dụng sau.

$imageFileType : Phần mở rộng của file (chuyển sang dạng chữ thường)

Tiếp theo chúng ta sẽ kiểm tra xem file upload lên có file là image không.

Kiểm tra File đã tồn tại

Kiểm tra xem file upload tồn tại trong thư mục “uploads” chưa. Nếu có, thông báo lỗi và chuyển $uploadOk thành 0

// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}

Giới hạn kích thước file

Trường input upload file trong form có name là “fileToUpload”

Bây giờ chúng ta sẽ lấy kích thước file tải lên, và kiểm tra. Nếu lớn hơn 500KB thông báo lỗi và set $uploadOk thành 0.

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}

Kiểm tra type file

Code bên dưới chỉ cho phép upload file JPG, JPEG, PNG, và GIF. Nếu khác, thông báo lỗi và set $uploadOk thành 0.

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

Code hoàn chỉnh của file PHP upload file

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
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;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>