Upload File với PHP

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 27 tháng 2, 2025

Trong bài học này, chúng ta sẽ tìm hiểu cách xử lý file upload trong PHP. Học viên sẽ học cách tải lên file, kiểm tra loại file, kích thước file và lưu trữ file một cách an toàn trên server.

1. Upload File với PHP

1.1 Cách xử lý file upload trong PHP

Tạo form upload file

  • Form HTML cho phép tải file lên:
    <form action="upload.php" method="post" enctype="multipart/form-data">
        Chọn file để upload:
        <input type="file" name="fileToUpload">
        <input type="submit" value="Upload File" name="submit">
    </form>
    

Xử lý file trong PHP

  • Trong upload.php, sử dụng $_FILES để lấy thông tin file:
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $target_dir = "uploads/";
        $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "File " . htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " đã được upload thành công.";
        } else {
            echo "Có lỗi khi upload file.";
        }
    }
    

1.2 Kiểm tra loại file, kích thước file

Kiểm tra loại file

  • Chỉ cho phép upload các định dạng file nhất định (ví dụ: hình ảnh, PDF).
    $allowed_types = ["jpg", "png", "jpeg", "gif", "pdf"];
    $file_type = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
    if (!in_array($file_type, $allowed_types)) {
        die("Chỉ cho phép upload file JPG, PNG, JPEG, GIF, PDF.");
    }
    

Kiểm tra kích thước file

  • Hạn chế kích thước file upload (ví dụ: 2MB).
    if ($_FILES["fileToUpload"]["size"] > 2000000) {
        die("File quá lớn. Kích thước tối đa là 2MB.");
    }
    

1.3 Lưu trữ file an toàn trên server

Tránh ghi đè file trùng tên

  • Đổi tên file trước khi lưu trữ.
    $new_filename = uniqid() . "_" . basename($_FILES["fileToUpload"]["name"]);
    $target_file = $target_dir . $new_filename;
    

Kiểm tra MIME Type của file

  • Đảm bảo file đúng định dạng bằng cách kiểm tra MIME Type:
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime_type = finfo_file($finfo, $_FILES["fileToUpload"]["tmp_name"]);
    finfo_close($finfo);
    if (!in_array($mime_type, ["image/jpeg", "image/png", "application/pdf"])) {
        die("File không hợp lệ.");
    }
    

Bảo mật thư mục upload

  • Tạo file .htaccess trong thư mục uploads/ để ngăn chặn thực thi file PHP:
    <FilesMatch "\.php$">
        deny from all
    </FilesMatch>
    

2. Kết luận

  • Cách tạo form upload file và xử lý file trong PHP.
  • Cách kiểm tra loại file, kích thước file để đảm bảo an toàn.
  • Cách lưu trữ file an toàn và ngăn chặn lỗ hổng bảo mật.
Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ