Ngu ngơ học làm web (83) - Upload tập tin

Tiếp theo của: Ngu ngơ học làm web (82) - Kỹ thuật đệ quy 2
-----

Phần 83.       Upload tập tin


Đây là clip số 93:


Để tải một tập tin từ máy người dùng lên server (upload) cần thực hiện các bước sau:

- Chuẩn bị tập tin để tải lên

- Tạo một form bằng HTML, thẻ <form> phải có thuộc tính [enctype=“multipart/form-data”]

- Form phải có một input với [type=“file”][name=“fileUpload”]

- Sau khi bấm nút Submit, sẽ kiểm tra biến $_FILE[‘fileUpload’] trên server để có được các thông tin của tập tin đã được tải lên

- Sau khi bấm nút Submit, phần nội dung của tập tin cũng được gửi lên server

- Tại server:

+ Tập tin được lưu vào bộ nhớ tạm, với tên là *.tmp

+ Di chuyển tập tin tạm vào thư mục mong muốn

+ Đổi tên tập tin tạm thành tên mới như mong muốn

Các thông tin có trong biến $_FILE[‘fileUpload’]:

- $_FILE[‘fileUpload’][‘name’]: tên ban đầu của tập tin được tải lên server

- $_FILE[‘fileUpload’][‘size’]: kích thước của tập tin

- $_FILE[‘fileUpload’][‘type’]: kiểu của tập tin

- $_FILE[‘fileUpload’][‘tmp_name’]: tên tập tin tạm, chứa nội dung của tập tin được tải lên server (tuy nhiên sau khi submit, tìm kiếm thử tập tin này trên server thì không thấy, lý do: tập tin này bị xóa ngay khi đoạn mã về upload tập tin thực hiện xong?).

- $_FILE[‘fileUpload’][‘error’]: thông báo lỗi khi tải tập tin

Đoạn mã ví dụ:

[index.php]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>PHP</title>
</head>
<body>
<?php
  if (isset($_FILES['fileUpload'])) {
    $fileUpload = $_FILES['fileUpload'];
    if ($fileUpload['name'] != null) {
      $fileNameTmp = $fileUpload['tmp_name'];
      $destination = './files/' . $fileUpload['name'];
      if (move_uploaded_file($fileNameTmp, $destination)) {
        echo 'upload succeeded!';
      } else {
        echo 'upload failed!';
      }
    }
  }
 
?>
  <form action="#" method="post" enctype="multipart/form-data">
    <input type="file" name="fileUpload">
    <input type="submit" value="Submit">
  </form>
</body>
</html>

Thực hiện upload tập tin với tên mới để tránh tình trạng ghi đè.

[index.php]

Sửa lại đoạn mã như sau:

  // tạo tên tập tin ngẫu nhiên
  function randomString($length = 5) {
    // tạo ra một mảng gồm các kí tự AZaz09
    $arrChar = array_merge(range('A', 'Z'), range('a', 'z'), range('0', '9'));
    // chuyển mảng thành chuỗi
    $chars = implode($arrChar, '');
    // đảo chuỗi ngẫu nhiên
    $chars = str_shuffle($chars);
    $result = substr($chars, 0, 5);
    return $result;
  }

  if (isset($_FILES['fileUpload'])) {
    $fileUpload = $_FILES['fileUpload'];
    if ($fileUpload['name'] != null) {
      $fileNameTmp = $fileUpload['tmp_name'];
      $random = randomString(5);
      $destination = './files/' . $random . '_' . $fileUpload['name'];
      if (move_uploaded_file($fileNameTmp, $destination)) {
        echo 'upload succeeded!';
      } else {
        echo 'upload failed!';
      }
    }

  }
-----------
Cập nhật [16/9/2020]
-----------
Xem thêm: