PHP - Tải lên tệp
Một tập lệnh PHP có thể được sử dụng với một 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.php trang mô tả thư mục tạm thời được sử dụng để tải lên tệp là upload_tmp_dir và kích thước tối đa được phép của tệp có thể tải lên được nêu là upload_max_filesize. Các tham số này được đặt thành tệp cấu hình PHPphp.ini
Quá trình tải tệp lê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 sẽ xuất hiện trong văn bản được gửi sau đó người dùng nhấp vào nút gửi.
Tệp đã chọn sẽ đượ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ần thiết cho cả vị trí tạm thời và vị trí cuối cùng phải đặ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ẽ không thành công.
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
Mã HTM sau đây tạo biểu mẫu người tải lên. Biểu mẫu này có thuộc tính phương thức được đặt thànhpost và thuộc tính enctype được đặt thành multipart/form-data
<?php
if(isset($_FILES['image'])){
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size =$_FILES['image']['size'];
$file_tmp =$_FILES['image']['tmp_name'];
$file_type=$_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$extensions= array("jpeg","jpg","png");
if(in_array($file_ext,$extensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if($file_size > 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);
}
}
?>
<html>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit"/>
</form>
</body>
</html>
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ầu được gọi là $_FILES. Biến này là một mảng thứ nguyên kép được 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 chỉ định cho thuộc tính tên của đầu vào trong biểu mẫu tải lên làfile, sau đó PHP sẽ tạo năm biến sau:
$_FILES['file']['tmp_name'] - tệp được tải lên trong thư mục tạm thời trên máy chủ web.
$_FILES['file']['name'] - tên thực của tệp được tải lên.
$_FILES['file']['size'] - kích thước tính bằng byte của tệp tải lên.
$_FILES['file']['type'] - kiểu MIME của tệp đã tải lên.
$_FILES['file']['error'] - mã lỗi liên quan đến tải lên tệp này.
Thí dụ
Ví dụ dưới đây sẽ cho phép tải lên hình ảnh và trả lại kết quả là thông tin tệp đã tải lên.
<?php
if(isset($_FILES['image'])){
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size = $_FILES['image']['size'];
$file_tmp = $_FILES['image']['tmp_name'];
$file_type = $_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$extensions= array("jpeg","jpg","png");
if(in_array($file_ext,$extensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if($file_size > 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);
}
}
?>
<html>
<body>
<form action = "" method = "POST" enctype = "multipart/form-data">
<input type = "file" name = "image" />
<input type = "submit"/>
<ul>
<li>Sent file: <?php echo $_FILES['image']['name']; ?>
<li>File size: <?php echo $_FILES['image']['size']; ?>
<li>File type: <?php echo $_FILES['image']['type'] ?>
</ul>
</form>
</body>
</html>
Nó sẽ tạo ra kết quả sau: