Bạn đã bao giờ tự hỏi làm thế nào các trang web xây dựng hệ thống để upload file bằng PHP chưa? Hôm nay chúng ta sẽ tìm hiểu về quá trình upload file trong PHP.

Bạn muốn trở thành một nhà lập trình PHP chuyên nghiệp? Hãy bắt đầu với cuốn Ebook hữu ích từ Stringee! 

>>> ĐĂNG KÝ NHẬN EBOOK PHP MIỄN PHÍ TẠI ĐÂY:  

Dưới đây là hướng dẫn cơ bản về cách thực hiện việc upload file trong PHP từ Stringee.

1. Tạo form HTML để cho người dùng chọn và gửi file

<!DOCTYPE html>
<html>
<head>
    <title>Upload File Example</title>
</head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload File" name="submit">
    </form>
</body>
</html>

Một số quy tắc cần tuân theo đối với file HTML ở trên:

Bắt buộc phải sử dụng method "post" Cần thuộc tính: enctype="multipart/form-data". Nó chỉ định loại nội dung nào sẽ được sử dụng Nếu không có các yêu cầu trên, file tải lên sẽ không hoạt động.

Những điều khác cần chú ý:

Sau khi chọn xong file và bấm "submit", dữ liệu được truyền đến file "upload.php", mà chúng ta sẽ tạo tiếp theo đây.

2. Tạo file upload.php để xử lý việc upload

Chúng ta tạo một file có tên là upload.php để xử lý việc 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;
  }
}
?>

Trong đó:

  • $target_dir = "uploads/" - chỉ định thư mục nơi tệp sẽ được đặt
  • $target_file chỉ định đường dẫn của tệp sẽ được tải lên
  • $uploadOk=1 chưa được sử dụng (sẽ sử dụng sau)
  • $imageFileType giữ phần mở rộng tệp của tệp (ở dạng chữ thường

Xem thêm bài viết về PHP:

- Tìm hiểu về hàm preg_match_all trong PHP

- Xử lý hàm date (ngày tháng) trong PHP

- Giới hạn ký tự hiển thị và chức năng read more trong PHP

3. Kiểm tra xem file đã tồn tại hay chưa

Chúng ta sẽ kiểm tra xem tệp đã tồn tại trong thư mục "upload" chưa. Nếu file đó đã tồn tại, một thông báo lỗi sẽ hiển thị và $uploadOk được gán bằng 0:

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

4. Kiểm tra và chặn upload khi kích thước của tệp quá lớn

Ở ví dụ này chúng ta chặn việc upload file có kích thước lớn hơn 500KB, thông báo lỗi sẽ hiển thị và $uploadOk được gán bằng 0:

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

5. Chặn các loại tệp

Ví dụ dưới đây chỉ cho phép người dùng tải lên các tệp JPG, JPEG, PNG và GIF. Tất cả các loại tệp khác đưa ra thông báo lỗi trước khi gán $uploadOk bằng 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;
}

Như vậy, sau khi triển khai các bước, chúng ta sẽ có được file upload.php hoàn chỉnh 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;
  }
}

// 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 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
}
?>

Kết luận

Như vậy, chúng ta đã tìm hiểu về cách upload file trong PHP. Nó là một kỹ năng khá quan trọng trong lập trình với PHP. Bạn hãy thử thực hành các ví dụ trên để nắm được rõ hơn cách upload file trong PHP nhé!

Stringee Communication APIs là giải pháp cung cấp các tính năng như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài chăm sóc khách hàng có thể tích hợp trực tiếp vào các ứng dụng/website của doanh nghiệp nhanh chóng. Bộ giải pháp này giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Mời quý bạn đọc đăng ký dùng thử và nhận tư vấn tại đây: