$_FILES

$_FILES

Biến $_FILES để quản lý file upload. Khi upload một file có html input name là myfile thì PHP sẽ tạo ra một mảng $_FILES['myfile'] có các giá trị:

  • $_FILES['myfile']['name'] là tên file upload
  • $_FILES['myfile']['type'] là kiểu file (ví dụ ‘image/png’)
  • $_FILES['myfile']['size'] là kích cỡ của file (được tính bằng bytes)
  • $_FILES['myfile']['tmp_name'] là tên tạm khi được lưu trên server
  • $_FILES['myfile']['error'] là mã lỗi khi upload, trường hợp không lỗi thì sẽ nhận giá trị 0 (hay UPLOAD_ERR_OK)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>
<body>
  <pre>
    <?php
      if (isset($_FILES['myfile'])) {
        var_dump($_FILES['myfile']);
        // -> [
        // "name" => "file1.png",
        // "type" => ["image/png", "application/pdf"],
        // "tmp_name" => "tmp/phpImsis",
        // "error" => 0,
        // "size" => 118205
        ]
      }
    ?>
  </pre>
  <form method="post" enctype="multipart/form-data">
    File <input type="file" name="myfile" required> <br />
    <button type="submit">Send file</button>
  </form>
</body>
</html>

Upload file vào thư mục /uploads

Để load một file vào một thư mục trên folder và đặt lại tên cho file hãy sử dụng hàm move_uploaded_file.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
$uploads_dir = '/uploads';
if (isset($_FILES["myfile"]) && $_FILES["myfile"]["error"] == UPLOAD_ERR_OK) {
  $tmp_name = $_FILES["myfile"]["tmp_name"];
  // validate name của file
  $name = basename($_FILES["myfile"]["name"]);
  if (move_uploaded_file($tmp_name, "$uploads_dir/$name")) {
    echo 'upload thành công';
  }
}

Upload nhiều file một lúc

Khi upload nhiều file, đặt name trong html tương tự như myfile[] (có [] ở cuối).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
<body>
  <pre>
    <?php
      if (isset($_FILES['myfile'])) {
        var_dump($_FILES['myfile']);
        // -> [
        //   "name" => ["file1.png", "file2.pdf"],
        //   "type" => ["image/png", "application/pdf"],
        //   "tmp_name" => ["tmp/phpLFqpyf", "tmp/phpi7khbe"],
        //   "error" => [0, 0],
        //   "size" => [118205, 10026]
        // ]
      }
    ?>
  </pre>
  <form method="post" enctype="multipart/form-data">
    File 1 <input type="file" name="myfile[]" required> <br />
    File 2 <input type="file" name="myfile[]" required> <br />
    <button type="submit">Send file</button>
  </form>
</body>
</html>

Khi upload lên thì $_FILES["myfile"] sẽ là một mảng của mảng. Với $_FILES["myfile"]['name'][0] là tên file 1, $_FILES["myfile"]['name'][1] là tên file 2. Tương tự với các trường khác.

Các cấu hình khi upload file

Các cấu hình trong file php.ini

  • file_uploads: true hoặc false cho phép có bật/tắt chức năng upload file trong PHP
  • upload_max_filesize: giới hạn số lượng bytes được upload, vượt quá số lượng này file sẽ không được upload và sẽ báo lỗi.
  • upload_tmp_dir: thư mục tạm khi upload file lên, mặc định trong linux là /tmp
  • post_max_size: giới hạn số lượng bytes của method post.

Nếu muốn chỉnh giới hạn file upload là 20M thì chỉnh cả upload_max_filesizepost_max_size20M.