Ngu ngơ học làm web (84) - Bài tập upload tập tin

Tiếp theo của: Ngu ngơ học làm web (83) - Upload tập tin
-----

Phần 84.       Bài tập upload tập tin


Đây là clip số 94:


Tạo ứng dụng upload tập tin, với các yêu cầu:

- Chỉ cho upload các tập tin có kích thước từ 100 KB tới 5MB

- Chỉ cho upload các tập tin có phần mở rộng là: jpg, png, zip, mp3

- Đọc tập tin cấu hình config.ini để lấy các giá trị cần thiết

[index.php]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>PHP</title>
</head>
<body>
<?php
  require_once 'functions.php';
  $error = '';
  $configs = parse_ini_file('config.ini');

  if (isset($_FILES['fileUpload'])) {
    $fileUpload = $_FILES['fileUpload'];
    $flagSize = checkFileSize($fileUpload['size'], $configs['min_size'], $configs['max_size']);
    $flagExt = checkFileExtension($fileUpload['name'], explode('|', $configs['extension']));
    if ($fileUpload['name'] != null && $flagSize && $flagExt) {
      $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!';
      }
    }
    if ($flagSize == false) {
      $error = 'Upload không thành công, vui lòng upload tập tin từ 100KB tới 5MB và có phần mở rộng là jpg, png, zip, mp3';
    }
    if ($flagExt == false) {
     $error = 'Upload không thành công, vui lòng upload tập tin từ 100KB tới 5MB và có phần mở rộng là jpg, png, zip, mp3';
    }
  }
 
?>
  <form action="#" method="post" enctype="multipart/form-data">
    <input type="file" name="fileUpload">
    <input type="submit" value="Submit">
    <?php
      echo '<p style="color:red">' . $error . '</p>';
    ?>
  </form>
</body>
</html>

[functions.php]

<?php
// check file size
  function checkFileSize($size, $min, $max) {
    $flag = false;
    if ($size >= $min && $size <= $max) { $flag = true; }
    return $flag;
  }
  // check file extension
  function checkFileExtension($fileName, $arrExtension) {
    $ext = pathinfo($fileName, PATHINFO_EXTENSION);
    $flag = false;
    if (in_array(strtolower($ext), $arrExtension) == true) { $flag = true; }
    return $flag;
  }

  // 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;
  }
?>
[config.ini]
; Extension
extension = "jpg|png|mp3|zip"

; Size
min_size = 102400
max_size = 5242880

Đây là clip số 95:


Tải lên server nhiều tập tin với các yêu cầu:

- Chỉ cho tải lên các tập tin có kích thước từ 100 KB tới 5MB

- Chỉ cho tải lên các tập tin có phần mở rộng là: jpg, png, zip, mp3

- Đọc tập tin cấu hình config.ini để lấy các giá trị cần thiết

Thay đổi trong [index.php] như sau:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>PHP</title>
</head>
<body>
<?php
  require_once 'functions.php';
  $configs = parse_ini_file('config.ini');

  if (isset($_FILES['fileUpload'])) {
    $fileUpload = $_FILES['fileUpload'];
    foreach ($fileUpload['name'] as $key => $value) {
      $flagSize = checkFileSize($fileUpload['size'][$key], $configs['min_size'], $configs['max_size']);
      $flagExt = checkFileExtension($fileUpload['name'][$key], explode('|', $configs['extension']));
      if ($fileUpload['name'] != null && $flagSize && $flagExt) {
        $fileNameTmp = $fileUpload['tmp_name'][$key];
        $random = randomString(5);
        $destination = './files/' . $random . '_' . $fileUpload['name'][$key];
        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="file" name="fileUpload[]">
    <input type="file" name="fileUpload[]">
    <input type="submit" value="Submit">
  </form>
</body>
</html>

Có thể sử dụng thuộc tính “multiple” của input[type=“file”] để cho phép nhập nhiều tập tin cho một input, tuy nhiên cần cân nhắc vì không phải mọi trình duyệt đều hỗ trợ.

<form action="#" method="post" enctype="multipart/form-data">
    <input type="file" name="fileUpload[]" multiple>
    <input type="submit" value="Submit">

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