Tập lệnh PHP có thể được sử dụng với biểu mẫu HTML để cho phép người dùng tải tệp lên máy chủ. Ban đầu, các tệp được tải lên một thư mục tạm thời và sau đó được chuyển đến đích đích bằng tập lệnh PHP
Thông tin trong phpinfo. trang php mô tả thư mục tạm thời được sử dụng để tải tệp lên là upload_tmp_dir và kích thước tệp tối đa được phép tải lên được nêu là upload_max_filesize. Các tham số này được đặt vào tệp cấu hình PHP php. ban đầu
Quá trình tải lên một tệp tuân theo các bước sau -
Người dùng mở trang chứa biểu mẫu HTML có tệp văn bản, nút duyệt và nút gửi
Người dùng nhấp vào nút duyệt và chọn tệp để tải lên từ PC cục bộ
Đường dẫn đầy đủ đến tệp đã chọn xuất hiện trong trường văn bản, sau đó người dùng nhấp vào nút gửi
Tệp đã chọn được gửi đến thư mục tạm thời trên máy chủ
Tập lệnh PHP được chỉ định làm trình xử lý biểu mẫu trong thuộc tính hành động của biểu mẫu kiểm tra xem tệp đã đến chưa và sau đó sao chép tệp vào một thư mục dự định
Tập lệnh PHP xác nhận thành công cho người dùng
Như thường lệ, khi ghi tệp, cả vị trí tạm thời và vị trí cuối cùng đều cần được đặt quyền cho phép ghi tệp. Nếu một trong hai được đặt thành chỉ đọc thì quá trình sẽ thất bại
Tệp được tải lên có thể là tệp văn bản hoặc tệp hình ảnh hoặc bất kỳ tài liệu nào
Tạo biểu mẫu tải lên
Đoạn mã HTML dưới đây tạo một biểu mẫu tải lên. Biểu mẫu này có thuộc tính method được đặt thành post và thuộc tính enctype được đặt thành multipart/form-data
2097152]{ $errors[]='File size must be excately 2 MB'; } if[empty[$errors]==true]{ move_uploaded_file[$file_tmp,"images/".$file_name]; echo "Success"; }else{ print_r[$errors]; } } ?>
Nó sẽ tạo ra kết quả sau -
Tạo tập lệnh tải lên
Có một biến PHP toàn cục được gọi là $_FILES. Biến này là một mảng hai chiều liên kết và giữ tất cả thông tin liên quan đến tệp đã tải lên. Vì vậy, nếu giá trị được gán cho thuộc tính tên của đầu vào trong biểu mẫu tải lên là tệp, thì PHP sẽ tạo năm biến sau -
[PHP 4 >= 4. 3. 0, PHP 5, PHP 7, PHP 8]
mime_content_type - Phát hiện loại nội dung MIME cho một tệp
Sự miêu tả
mime_content_type[tài nguyên. chuỗi $filename
]. sợi dây. SAI
Thông số
filename
Đường dẫn đến tệp đã kiểm tra
Giá trị trả về
Trả về loại nội dung ở định dạng MIME, như text/plain
hoặc application/octet-stream
hoặc false
khi thất bại
Lỗi/Ngoại lệ
Khi thất bại, một E_WARNING
được phát ra
ví dụ
Ví dụ #1 mime_content_type[] Ví dụ
echo mime_content_type['php.gif'] . "\n";
echo mime_content_type['test.php'];
?>
Ví dụ trên sẽ xuất ra
Tính năng này cho phép mọi người tải lên cả tệp văn bản và tệp nhị phân. Với các chức năng xác thực và thao tác tệp của PHP, bạn có toàn quyền kiểm soát ai được phép tải lên và những gì sẽ được thực hiện với tệp sau khi tệp đã được tải lên
PHP có khả năng nhận tệp tải lên từ bất kỳ trình duyệt tuân thủ RFC-1867 nào
Ghi chú. Cấu hình liên quan Lưu ý
Xem thêm các lệnh , , và trong php. ban đầu
PHP cũng hỗ trợ tải lên tệp phương thức PUT như được sử dụng bởi Netscape Composer và ứng dụng khách Amaya của W3C. Xem Hỗ trợ Phương pháp PUT để biết thêm chi tiết
Ví dụ #1 Biểu mẫu tải tệp lên
Có thể tạo màn hình tải lên tệp bằng cách tạo một biểu mẫu đặc biệt trông giống như thế này
Send this file:
__URL__
trong ví dụ trên nên được thay thế và trỏ đến tệp PHP
Trường ẩn MAX_FILE_SIZE
[được đo bằng byte] phải đứng trước trường nhập tệp và giá trị của nó là kích thước tệp tối đa được chấp nhận bởi PHP. Phần tử biểu mẫu này phải luôn được sử dụng vì nó giúp người dùng không phải chờ đợi một tệp lớn được chuyển chỉ để thấy rằng nó quá lớn và quá trình chuyển không thành công. Ghi nhớ. Đánh lừa cài đặt này ở phía trình duyệt khá dễ dàng, vì vậy đừng bao giờ tin vào các tệp có kích thước lớn hơn bị tính năng này chặn. Nó chỉ đơn thuần là một tính năng tiện lợi cho người dùng ở phía máy khách của ứng dụng. Tuy nhiên, cài đặt PHP [ở phía máy chủ] cho kích thước tối đa không thể bị lừa
Ghi chú
Đảm bảo biểu mẫu tải lên tệp của bạn có thuộc tính
enctype="multipart/form-data"
nếu không quá trình tải lên tệp sẽ không hoạt động
Toàn cầu $_FILES sẽ chứa tất cả thông tin tệp đã tải lên. Nội dung của nó từ mẫu ví dụ như sau. Lưu ý rằng điều này giả định việc sử dụng tệp tải lên tên tệp người dùng, như được sử dụng trong tập lệnh ví dụ ở trên. Đây có thể là bất kỳ tên nào
$_FILES['tệp người dùng']['tên']Tên gốc của tệp trên máy khách
$_FILES['userfile']['type']Loại mime của tệp, nếu trình duyệt cung cấp thông tin này. Một ví dụ sẽ là "image/gif"
. Tuy nhiên, loại mime này không được kiểm tra ở phía PHP và do đó không được chấp nhận giá trị của nó
Kích thước, tính bằng byte, của tệp đã tải lên
$_FILES['userfile']['tmp_name']Tên tệp tạm thời của tệp chứa tệp đã tải lên được lưu trữ trên máy chủ
Mã lỗi liên quan đến tệp tải lên này
$_FILES['userfile']['full_path']Đường dẫn đầy đủ do trình duyệt gửi. Giá trị này không phải lúc nào cũng chứa cấu trúc thư mục thực và không thể tin cậy được. Có sẵn kể từ PHP 8. 1. 0
Theo mặc định, các tệp sẽ được lưu trữ trong thư mục tạm thời mặc định của máy chủ, trừ khi một vị trí khác đã được đưa ra với lệnh trong php. ban đầu. Có thể thay đổi thư mục mặc định của máy chủ bằng cách đặt biến môi trường TMPDIR trong môi trường mà PHP chạy. Đặt nó bằng putenv[] từ bên trong tập lệnh PHP sẽ không hoạt động. Biến môi trường này cũng có thể được sử dụng để đảm bảo rằng các hoạt động khác cũng đang hoạt động trên các tệp đã tải lên
Ví dụ #2 Xác thực tệp tải lên
Xem thêm các mục chức năng cho is_uploaded_file[] và move_uploaded_file[] để biết thêm thông tin. Ví dụ sau sẽ xử lý tệp tải lên từ một biểu mẫu
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename[$_FILES['userfile']['name']];
echo '
';
if [move_uploaded_file[$_FILES['userfile']['tmp_name'], $uploadfile]] {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}echo 'Here is some more debugging info:';
print_r[$_FILES];
print "
";
';
if [move_uploaded_file[$_FILES['userfile']['tmp_name'], $uploadfile]] {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}echo 'Here is some more debugging info:';
print_r[$_FILES];
print "
0Tập lệnh PHP nhận tệp đã tải lên sẽ triển khai bất kỳ logic nào cần thiết để xác định những gì sẽ được thực hiện với tệp đã tải lên. Ví dụ: bạn có thể sử dụng biến $_FILES['userfile']['size'] để loại bỏ bất kỳ tệp nào quá nhỏ hoặc quá lớn. Bạn có thể sử dụng biến $_FILES['userfile']['type'] để loại bỏ bất kỳ tệp nào không phù hợp với một tiêu chí loại nhất định, nhưng chỉ sử dụng biến này làm bước đầu tiên trong một loạt kiểm tra, vì giá trị này hoàn toàn nằm dưới . Ngoài ra, bạn có thể sử dụng $_FILES['userfile']['error'] và lập kế hoạch logic theo mã lỗi. Bất kể logic là gì, bạn nên xóa tệp khỏi thư mục tạm thời hoặc chuyển tệp đó sang nơi khác
Nếu không có tệp nào được chọn để tải lên trong biểu mẫu của bạn, PHP sẽ trả về $_FILES['userfile']['size'] là 0 và $_FILES['userfile']['tmp_name'] là không
Tệp sẽ bị xóa khỏi thư mục tạm thời khi kết thúc yêu cầu nếu tệp chưa được chuyển đi hoặc đổi tên