Mảng tập tin đầu vào php

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 -

Mảng tập tin đầu vào php

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 -

If you try and upload files with multi-dimensional names like this:


You will get an unexpected format like this:

array(
    'submission' => array
        (
            'name' => array( 'screenshot' => 'monster_wallpaper.jpg' ),
            'type' => array( 'screenshot' => 'image/jpeg' ),
            'tmp_name' => array( 'screenshot' => '/tmp/php48lX2Y' ),
            'error' => array( 'screenshot' => 0 ),
            'size' => array( 'screenshot' => 223262 ),
        ),
....
?>

________số 8_______

function format_files_array( $files, $name = null, &$new = false, $path = false ){
    $names = array( 'name' => 'name', 'type' => 'type', 'tmp_name' => 'tmp_name', 'error' => 'error', 'size' => 'size' );

    foreach( $files as $key => &$part )
    {
        $key = ( string ) $key;
        if( in_array( $key, $names ) )
            $name = $key;
        if( !in_array( $key, $names ) )
            $path[] = $key;
        if( is_array( $part ) )
            $part = format_files_array( $part, $name, $new, $path );
        elseif( !is_array( $part ) )
        {
            $current =& $new;
            foreach( $path as $p )
                $current =& $current[$p];
            $current[$name] = $part;
            unset( $path );
            $name = null;
        }
    }

    return $new;
}
?>

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ó

$_FILES['userfile']['size']

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ủ

$_FILES['userfile']['error']

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 "

0

Tậ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