--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Hiển thị các bài đăng có nhãn Bài tập upload tập tin. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Bài tập upload tập tin. Hiển thị tất cả bài đăng

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: