$_FILES là một trong những biến 'siêu toàn cục', hay biến toàn cục tự động, trong PHP. Nó có sẵn trong tất cả các phạm vi trong suốt một tập lệnh. Biến $_FILES là một mảng liên kết chứa các mục được tải lên thông qua phương thức HTTP POST.
Một tệp được tải lên khi một biểu mẫu HTML chứa một phần tử input với loại tệp, thuộc tính enctype của nó được đặt thành multipart/form-data, và thuộc tính phương thức được đặt thành phương thức HTTP POST.
$HTTP_POST_FILES cũng chứa thông tin tương tự, nhưng nó không phải là một siêu toàn cục và hiện đã bị loại bỏ.
Đoạn HTML sau đây chứa một biểu mẫu với phần tử input loại file −
<input type="file" name="file">
"input type" này hiển thị một nút có nhãn là tệp. Khi nhấn vào, một hộp thoại chọn tệp sẽ xuất hiện. Bạn có thể chọn một tệp để tải lên.
Kịch bản PHP trên máy chủ có thể truy cập dữ liệu tệp trong biến $_FILES.
Mảng $_FILES chứa các thuộc tính sau −
$_FILES['file']['name'] − Tên gốc của tệp mà người dùng đã chọn để tải lên.
$_FILES['file']['type'] − Kiểu mime của tệp. Một ví dụ sẽ là "image/gif". Tuy nhiên, kiểu mime này không được kiểm tra ở phía PHP.
$_FILES['file']['size'] − Kích thước, tính bằng byte, của tệp đã tải lên.
$_FILES['file']['tmp_name'] − Tên tạm thời của tệp mà tệp đã tải lên được lưu trữ trên máy chủ.
$_FILES['file']['full_path'] − Đường dẫn đầy đủ như được trình duyệt gửi lên. Có sẵn từ PHP 8.1.0.
$_FILES['file']['error'] − Mã lỗi liên quan đến việc tải lên tệp này.
Các error codes được liệt kê như dưới đây −
Error Codes | Description |
---|---|
UPLOAD_ERR_OK (Value=0) | There is no error, the file uploaded with success. |
UPLOAD_ERR_INI_SIZE (Value=1) | The uploaded file exceeds the upload_max_filesize directive in php.ini. |
UPLOAD_ERR_FORM_SIZE (Value=2) | The uploaded file exceeds the MAX_FILE_SIZE. |
UPLOAD_ERR_PARTIAL (Value=3) | The uploaded file was only partially uploaded. |
UPLOAD_ERR_NO_FILE (Value=4) | No file was uploaded. |
UPLOAD_ERR_NO_TMP_DIR (Value=6) | Missing a temporary folder. |
UPLOAD_ERR_CANT_WRITE (Value=7) | Failed to write file to disk. |
UPLOAD_ERR_EXTENSION (Value=8) | A PHP extension stopped the file upload. |
Tệp "test.html" sau đây chứa một biểu mẫu HTML có thuộc tính enctype được thiết lập là multiform/form-data. Nó cũng có một phần tử input file, hiển thị một nút trên biểu mẫu cho người dùng chọn tệp để tải lên. Lưu tệp này vào thư mục gốc tài liệu của máy chủ Apache của bạn.
<html> <body> <form action="hello.php" method="POST" enctype="multipart/form-data"> <p><input type="file" name="file"></p> <p><input type ="submit" value="submit"></p> </form> </body> </html>
HTML trên hiển thị một nút có tên "Chọn Tệp" trong cửa sổ trình duyệt. Để mở hộp thoại chọn tệp, hãy nhấp vào nút "Chọn Tệp". Khi tên của tệp đã chọn xuất hiện, hãy nhấp vào nút submit .
Kịch bản PHP phía máy chủ ( upload.php ) trong thư mục gốc tài liệu đọc mảng biến $_FILES như sau −
<?php echo "Filename: " . $_FILES['file']['name']."<br>"; echo "Type : " . $_FILES['file']['type'] ."<br>"; echo "Size : " . $_FILES['file']['size'] ."<br>"; echo "Temp name: " . $_FILES['file']['tmp_name'] ."<br>"; echo "Error : " . $_FILES['file']['error'] . "<br>"; ?>
Nó sẽ tạo ra output −
Filename: abc.txt Type : text/plain Size : 556762 Temp name: C:\xampp\tmp\phpD833.tmp Error : 0
Trong PHP, bạn có thể tải lên nhiều tệp bằng cách sử dụng tính năng mảng HTML −
<html> <body> <form action="hello.php" method="POST" enctype="multipart/form-data"> <input type="file" name="files[]"/> <input type="file" name="files[]"/> <input type ="submit" value="submit"/> </form> </body> </html>
Bây giờ, hãy thay đổi đoạn mã PHP ( hello.php ) thành −
<?php foreach ($_FILES["files"]["name"] as $key => $val) { echo "File uploaded: $val <br>"; } ?>
Trình duyệt sẽ hiển thị nhiều nút "Chọn Tệp". Sau khi bạn tải lên các tệp đã chọn bằng cách nhấp vào nút "Gửi", trình duyệt sẽ hiển thị tên các tệp như một phản hồi cho URL http://localhost/hello.html như được hiển thị dưới đây −