PHP - Tải lên tệp

Xin chào các bạn đang học lập trình PHP! Hôm nay, chúng ta sẽ cùng nhau khám phá thế giới thú vị của việc tải lên tệp bằng PHP. Là người thầy thân thiện trong lĩnh vực máy tính, tôi sẽ dẫn dắt các bạn từng bước trong hành trình này. Hãy chuẩn bị đồ uống yêu thích của bạn, ngồi thoải mái, và cùng nhau bắt đầu cuộc phiêu lưu tải lên tệp này nhé!

PHP - File Uploading

Hiểu về việc tải lên tệp

Trước khi chúng ta nhảy vào mã nguồn, hãy dành một chút thời gian để hiểu về việc tải lên tệp là gì. Hãy tưởng tượng bạn đang gửi một lá thư cho bạn bè. Bạn viết lá thư, đặt nó vào phong bì, và gửi qua dịch vụ bưu điện. Việc tải lên tệp cũng tương tự như vậy! Thay vì một lá thư, bạn đang gửi một tệp (như ảnh hoặc tài liệu) từ máy tính của bạn lên máy chủ web.

Tạo biểu mẫu tải lên tệp

Bước đầu tiên trong hành trình tải lên tệp của chúng ta là tạo một biểu mẫu HTML cho phép người dùng chọn và tải lên tệp. Hãy tưởng tượng biểu mẫu này như phong bì mà chúng ta sử dụng để gửi lá thư.

Hãy tạo một biểu mẫu HTML đơn giản:

<form action="upload.php" method="post" enctype="multipart/form-data">
Chọn ảnh để tải lên:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Tải lên ảnh" name="submit">
</form>

Giải thích:

  1. action="upload.php": Điều này cho biết biểu mẫu sẽ gửi dữ liệu到哪里. Trong trường hợp này, chúng ta sẽ tạo một script PHP叫做 upload.php để xử lý việc tải lên tệp.
  2. method="post": Điều này xác định rằng chúng ta đang sử dụng phương thức POST để gửi dữ liệu.
  3. enctype="multipart/form-data": Điều này rất quan trọng! Nó cho biết biểu mẫu rằng chúng ta đang gửi không chỉ văn bản - chúng ta đang gửi một tệp.
  4. <input type="file">: Điều này tạo ra một nút cho phép người dùng chọn tệp từ máy tính của họ.

Tạo script tải lên

Bây giờ chúng ta đã có biểu mẫu, chúng ta cần tạo script PHP để xử lý việc tải lên tệp. Đây là nơi xảy ra phép thuật!

Hãy tạo file upload.php của chúng ta:

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

// Kiểm tra nếu tệp đã tồn tại
if (file_exists($target_file)) {
echo "Xin lỗi, tệp đã tồn tại.";
$uploadOk = 0;
}

// Kiểm tra kích thước tệp
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Xin lỗi, tệp của bạn quá lớn.";
$uploadOk = 0;
}

// Cho phép các định dạng tệp nhất định
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Xin lỗi, chỉ cho phép các tệp JPG, JPEG, PNG & GIF.";
$uploadOk = 0;
}

// Kiểm tra nếu $uploadOk được đặt thành 0 do lỗi
if ($uploadOk == 0) {
echo "Xin lỗi, tệp của bạn không được tải lên.";
// Nếu mọi thứ đều ổn, hãy thử tải lên tệp
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "Tệp ". basename( $_FILES["fileToUpload"]["name"]). " đã được tải lên.";
} else {
echo "Xin lỗi, có lỗi xảy ra khi tải lên tệp của bạn.";
}
}
}
?>

Wow, đó là rất nhiều mã! Đừng lo lắng, chúng ta sẽ phân tích từng bước:

  1. Đầu tiên, chúng ta kiểm tra xem biểu mẫu đã được gửi hay chưa bằng isset($_POST["submit"]).
  2. Chúng ta thiết lập một số biến:
  • $target_dir: Thư mục nơi chúng ta sẽ lưu trữ các tệp tải lên.
  • $target_file: Đường dẫn đầy đủ của tệp tải lên.
  • $uploadOk: Một cờ để theo dõi xem có thể tải lên tệp hay không.
  • $imageFileType: Định dạng tệp của tệp tải lên.
  1. Chúng ta thực hiện một số kiểm tra:
  • Tệp đã tồn tại trong thư mục tải lên chưa?
  • Kích thước tệp có quá lớn không?
  • Định dạng tệp có được phép không?
  1. Nếu bất kỳ kiểm tra nào đó thất bại, chúng ta đặt $uploadOk thành 0.

  2. Cuối cùng, nếu mọi thứ đều ổn ($uploadOk == 1), chúng ta sử dụng hàm move_uploaded_file() để di chuyển tệp tải lên từ vị trí tạm thời lên thư mục tải lên.

Các phương thức tải lên tệp phổ biến

Dưới đây là bảng các phương thức thường được sử dụng trong việc tải lên tệp bằng PHP:

Phương thức Mô tả
$_FILES["file"]["name"] Tên gốc của tệp trên máy khách
$_FILES["file"]["type"] Loại MIME của tệp
$_FILES["file"]["size"] Kích thước tệp tính bằng byte
$_FILES["file"]["tmp_name"] Tên tệp tạm thời của tệp lưu trữ trên máy chủ
$_FILES["file"]["error"] Mã lỗi liên quan đến việc tải lên tệp
move_uploaded_file() Di chuyển tệp đã tải lên đến một vị trí mới

Kết luận

Và thế là chúng ta đã có tất cả, các bạn! Chúng ta đã tạo một biểu mẫu cho phép người dùng chọn tệp, và một script PHP xử lý quá trình tải lên tệp, bao gồm kiểm tra lỗi và hạn chế định dạng tệp.

Nhớ rằng việc tải lên tệp có thể là một rủi ro bảo mật nếu không được xử lý đúng cách. Luôn xác minh và làm sạch đầu vào của người dùng, hạn chế định dạng và kích thước tệp, và lưu trữ các tệp tải lên trong một thư mục không thể truy cập trực tiếp qua trình duyệt web.

Khi kết thúc bài học này, tôi nhớ lại một sinh viên đã từng tải lên một tệp video 1GB lên một trang web dành cho ảnh đại diện. Nói chung, điều này không kết thúc tốt cho máy chủ! Vậy hãy luôn nhớ đặt giới hạn kích thước tệp, các bạn!

Tiếp tục thực hành, tiếp tục viết mã, và quan trọng nhất, hãy luôn vui vẻ với PHP! Đến gặp lại các bạn lần sau, chúc các bạn tải lên vui vẻ!

Credits: Image by storyset