Một trong những tính năng phổ biến cần có trong một ứng dụng web PHP điển hình là khả năng cho phép người dùng tải lên tệp. Việc tải lên tệp từ máy khách rất dễ dàng trong PHP. Trong chương này, chúng ta sẽ học cách sử dụng script PHP cho quá trình tải lên tệp.
Quá trình tải lên một tệp theo các bước sau −
Người dùng mở trang chứa một biểu mẫu HTML với các trường văn bản, một nút duyệt và một nút gửi.
Người dùng nhấp vào nút duyệt và chọn một tệp để tải lên từ máy tính cá nhân.
Đường dẫn đầy đủ đến tệp đã chọn sẽ xuất hiện trong ô văn bản sau đó người dùng nhấn nút gửi.
Tệp đã chọn được gửi đến thư mục tạm thời trên máy chủ.
Kịch bản PHP được chỉ định làm trình xử lý biểu mẫu trong thuộc tính action của biểu mẫu kiểm tra xem tệp đã đến hay chưa và sau đó sao chép tệp vào thư mục dự kiến.
Kịch bản PHP xác nhận sự thành công cho người dùng.
Để thực hiện hoạt động này, trước tiên chúng ta phải đảm bảo rằng các cài đặt cấu hình liên quan đến việc tải lên tệp được bật trong "php.ini".
Mở tệp "php.ini" và đảm bảo rằng các cài đặt sau được kích hoạt bằng cách xóa ký hiệu chấm phẩy (;) ở đầu các tham số file_uploads, upload_tmp_dir, upload_max_filesize và max_file_uploads −
;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. ; http://php.net/file-uploads file_uploads=On ; Temporary directory for HTTP uploaded files (will use system ; default if not specified). ; http://php.net/upload-tmp-dir upload_tmp_dir="C:\xampp\tmp" ; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize=40M ; Maximum number of files that can be uploaded via a single request max_file_uploads=20
Cần thiết phải đảm bảo rằng các thư mục cho cả vị trí tạm thời và vị trí cuối cùng có quyền truy cập được thiết lập cho phép ghi file. Nếu một trong hai thư mục được thiết lập là chỉ đọc, thì quá trình sẽ thất bại.
Tiếp theo, chúng ta cần thiết kế một biểu mẫu HTML cho việc tải lên tệp. Thuộc tính method của biểu mẫu phải là POST và enctype phải là multipart/form-data. Sử dụng loại input là file để cho phép người dùng duyệt và chọn tệp để tải lên.
<h2>File Upload Form</h2> <form method = "POST" action = "uploadfile.php" enctype="multipart/form-data"> <label for="file">File name:</label> <input type="file" name="uploadfile" /> <input type="submit" name="submit" value="Upload" /> </form>
Kịch bản uploadfile.php nhận tệp đã tải lên. Dữ liệu tệp được thu thập trong một biến siêu toàn cục $_FILES. Lấy tên, loại tệp, kích thước và thuộc tính tmp_name của tệp đã tải lên.
Hàm move_uploaded_file() sao chép tệp đã chọn vào thư mục tài liệu.
<?php echo "<b>File to be uploaded: </b>" . $_FILES["uploadfile"]["name"] . "<br>"; echo "<b>Type: </b>" . $_FILES["uploadfile"]["type"] . "<br>"; echo "<b>File Size: </b>" . $_FILES["uploadfile"]["size"]/1024 . "<br>"; echo "<b>Store in: </b>" . $_FILES["uploadfile"]["tmp_name"] . "<br>"; if (file_exists($_FILES["uploadfile"]["name"])){ echo "<h3>The file already exists</h3>"; } else { move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $_FILES["uploadfile"]["name"]); echo "<h3>File Successfully Uploaded</h3>"; } ?>
Giả sử rằng cả hai tệp myform.php và uploadfile.php đều được lưu trữ trong thư mục tài liệu.
Mở "myform.php" trong trình duyệt (http://localhost/myform.php) −
Nhấp vào nút File , duyệt đến tệp mong muốn để tải lên, và nhấp vào nút Upload .
Máy chủ phản hồi với thông điệp sau −