Hướng dẫn php ini settings for large file uploads - cài đặt php ini để tải lên tệp lớn

Các cân nhắc bảo mật không thay đổi bằng cách thay đổi các cài đặt này. Tuy nhiên, đối với hiệu suất, điều sau đây là hợp lệ:

Nghệ thuật phục vụ người dùng một cách biểu diễn là cung cấp đủ khả năng cho những gì được yêu cầu bởi tổng số người dùng của bạn. Chuyển điều này thành các ví dụ trên cài đặt của bạn sẽ giống như:

10 Người dùng tải lên 950 MB sẽ yêu cầu bạn phục vụ 9,5 GB Băng thông và thông lượng I/O [được ví dụ: Ipacted bởi tốc độ đĩa] theo cách thực hiện. Tôi với tư cách là người dùng có thể có thể sống với việc tải lên 950 MB trong 1 phút, nhưng sẽ không hài lòng với việc tôi mất một giờ.

100 người dùng tải lên 950 MB sẽ yêu cầu bạn phục vụ 95 GB ...

1000 người dùng tải lên 950 MB sẽ yêu cầu bạn phục vụ 950 GB ... ...

Nguyên nhân không phải tất cả người dùng của bạn đều có tối đa mọi lúc và thậm chí tải lên đồng thời có thể bị hạn chế. Tuy nhiên, các thiết lập tối đa này thêm vào ngăn xếp rủi ro của bạn. Vì vậy, tùy thuộc vào đặc điểm sử dụng của bạn và ressource của bạn nhét các cài đặt này có thể hợp lệ.

Tuy nhiên, tôi cho rằng bạn đã đưa ra những ví dụ cực đoan và muốn tìm hiểu về ý nghĩa.

Khi tôi Google "Tối ưu hóa Php Memory_Limit" Tôi nhận được điều này: //softwareengineering.stackexchange.com/questions/207935/benefits-of-setting-php-memory-limit-to-lower script

Rõ ràng bạn có thể làm tương tự với các cài đặt khác.

Trong diễn đàn, bạn có thể tìm thấy rất nhiều lời thề chống lại việc thiết lập các giá trị cấu hình đó cao như vậy. Tuy nhiên, có điều này trong môi trường, trong đó việc sử dụng Ressource được quản lý cẩn thận trên các lớp truy cập khác [ví dụ: hạn chế số lượng người dùng tải lên thông qua các quyền trong ứng dụng] đã làm việc rất tốt cho tôi.

Chào mừng bạn đến với một hướng dẫn về cách tải lên các tệp lớn trong PHP. Ngày xửa ngày xưa trong thời kỳ đồ đá của internet, tải lên có thể quản lý được mà không cần các tệp lớn. Nhưng những ngày này, chúng ta phải đối phó với tất cả các loại tệp quá khổ và cơ chế tải lên truyền thống của Cameron chỉ có thể xử lý nó.

Để đối phó với các tải lên lớn trong PHP, có một vài lựa chọn thay thế có thể:

  • Thay đổi giới hạn upload_max_filesize trong php.ini.
  • Tách và tải lên tệp thành các khối nhỏ hơn và lắp ráp chúng khi tải lên hoàn tất.
  • Thực hiện tải lên có thể tiếp tục.

Nhưng làm thế nào để mỗi phương pháp này hoạt động? Đọc về các ví dụ!

Tôi đã bao gồm một tệp zip với tất cả mã nguồn khi bắt đầu hướng dẫn này, vì vậy bạn không phải sao chép mọi thứ, hoặc nếu bạn chỉ muốn đi thẳng vào.

MỤC LỤC

Tải xuống & ghi chú

Đầu tiên, đây là liên kết tải xuống đến mã ví dụ như đã hứa.

Ghi chú nhanh

  • Có 3 bộ ví dụ trong tệp zip.
    • ________ 9 & NBSP; Điều chỉnh cài đặt PHP cơ bản.
    • php_value upload_max_filesize 150M
      php_value post_max_size 150M
      php_value max_input_time 300
      php_value max_execution_time 300
      0 Tải lên khối.
    • ________ 11 & nbsp; Tải lên có thể tiếp tục.
  • Để tải lên có thể tiếp tục, hãy cài đặt Trình soạn thảo và sử dụng nó để lấy thư viện phía máy chủ PHP trước-
    php_value upload_max_filesize 150M
    php_value post_max_size 150M
    php_value max_input_time 300
    php_value max_execution_time 300
    2.

Nếu bạn phát hiện ra một lỗi, hãy bình luận bên dưới. Tôi cũng cố gắng trả lời các câu hỏi ngắn, nhưng đó là một người so với toàn bộ thế giới, nếu bạn cần câu trả lời khẩn cấp, vui lòng kiểm tra danh sách các trang web của tôi để nhận trợ giúp lập trình.

Mã hóa ví dụ Tải xuống

Nhấn vào đây để tải xuống tất cả các mã nguồn ví dụ, tôi đã phát hành nó theo giấy phép MIT, vì vậy hãy thoải mái xây dựng trên đó nếu bạn muốn.

Tải lên lớn trong PHP

Được rồi, bây giờ chúng ta hãy vào các ví dụ và các cách có thể xử lý các tải lên lớn trong PHP.

Phương pháp 1] Tinh chỉnh cài đặt PHP

1a] Cập nhật Php.ini

php.ini

upload_max_filesize = 150M
post_max_size = 150M
max_input_time = 300
max_execution_time = 300

Đây là phương pháp dễ nhất cho các bạn đang xử lý các tải lên có thể quản lý được - chỉ cần thay đổi kích thước tệp được phép tối đa trong Php. & NBSP; Có 4 cài đặt để xem:

  • upload_max_filesize - Kích thước tệp tải lên tối đa được phép.
  • php_value upload_max_filesize 150M
    php_value post_max_size 150M
    php_value max_input_time 300
    php_value max_execution_time 300
    4 - Kích thước dữ liệu bài cho phép tối đa được phép.
  • php_value upload_max_filesize 150M
    php_value post_max_size 150M
    php_value max_input_time 300
    php_value max_execution_time 300
    5 - Thời gian đầu vào cho phép tối đa.
  • php_value upload_max_filesize 150M
    php_value post_max_size 150M
    php_value max_input_time 300
    php_value max_execution_time 300
    6 - Thời gian tối đa cho phép các tập lệnh được phép chạy.

Nhưng tất nhiên, tôi sẽ không khuyên bạn nên thay đổi tệp

php_value upload_max_filesize 150M
php_value post_max_size 150M
php_value max_input_time 300
php_value max_execution_time 300
7 trực tiếp. Điều này sẽ ảnh hưởng đến toàn bộ máy chủ và tất cả các trang web khác của bạn là tốt.

1b] Cập nhật tệp HTACCESS

.htaccess

php_value upload_max_filesize 150M
php_value post_max_size 150M
php_value max_input_time 300
php_value max_execution_time 300

Nếu bạn không có quyền truy cập vào

php_value upload_max_filesize 150M
php_value post_max_size 150M
php_value max_input_time 300
php_value max_execution_time 300
7 hoặc chỉ muốn áp dụng các cài đặt cho một trang web - cũng có thể thay đổi cài đặt bằng cách tạo tệp
php_value upload_max_filesize 150M
php_value post_max_size 150M
php_value max_input_time 300
php_value max_execution_time 300
9. Người dùng IIS và Nginx, bạn sẽ cần thực hiện một số nghiên cứu của riêng bạn.

1c] Tải lên!

1c-upload.php



  
  

 

Vâng, đây chỉ là một hình thức tải lên thông thường. Đối với những người có thể đã bỏ lỡ việc tải lên tệp cơ bản.

1D] Bộ ini?

Đối với các bạn đang nghĩ đến việc sử dụng



  
  

 
0 để thay đổi kích thước tải lên - hãy lưu ý rằng theo chỉ thị php.ini chính thức, upload_max_filesize chỉ có thể thay đổi trong


  
  

 
2. Có nghĩa là, nó chỉ có thể được điều chỉnh trong tệp
php_value upload_max_filesize 150M
php_value post_max_size 150M
php_value max_input_time 300
php_value max_execution_time 300
7 hoặc
php_value upload_max_filesize 150M
php_value post_max_size 150M
php_value max_input_time 300
php_value max_execution_time 300
9;


  
  

 
5 sẽ không hoạt động.

Phương pháp 2] Tải lên khối

2a] HTML & JavaScript

2a-chunk.html



  
// [C] INITIALIZE UPLOADER window.onload = [] => { // [C1] GET HTML FILE LIST var list = document.getElementById["list"]; // [C2] INIT PLUPLOAD var uploader = new plupload.Uploader[{ runtimes: "html5", browse_button: "pick", url: "2b-chunk.php", chunk_size: "10mb", init: { PostInit: [] => { list.innerHTML = "
Ready
"; }, FilesAdded: [up, files] => { plupload.each[files, [file] => { let row = document.createElement["div"]; row.id = file.id; row.innerHTML = `${file.name} [${plupload.formatSize[file.size]}] `; list.appendChild[row]; }]; uploader.start[]; }, UploadProgress: [up, file] => { document.querySelector[`#${file.id} strong`].innerHTML = `${file.percent}%`; }, Error: [up, err] => console.error[err] } }]; uploader.init[]; };

Phương pháp thứ hai này được gọi là Chunking, - chia một tệp lớn và tải chúng lên các khối nhỏ hơn. Mặc dù nghe có vẻ khó khăn, rất may có một thư viện nguồn mở có tên plupload mà chúng ta có thể sử dụng. Điều này & nbsp; khá nhiều phiên bản sửa đổi của tập lệnh demo plupload mặc định.

  1. Chỉ có 2 yếu tố HTML ở đây.
    • 
      
        
        
      
       
      
      6 Tải lên danh sách tệp và tiến trình.
    • 
      
        
        
      
       
      
      7 Nhấp để chọn tệp để tải lên.
  2. Đội trưởng rõ ràng. Tải plupload từ CDN.
  3. Bắt đầu plupload trên tải trang. Sẽ không giải thích từng dòng, nhưng về cơ bản, điều này bắt đầu tải lên ngay sau khi chọn một tệp.

Đó là ý chính của nó, đọc tài liệu chính thức [liên kết trong phần bổ sung bên dưới] nếu bạn cần nhiều tùy chỉnh hơn.

2b] Trình xử lý tải lên phía máy chủ

2b-chunk.php

8 trống trên khối đầu tiên.
  • Nối các đoạn vào tệp
    
    
      
      
    
     
    
    8 khi chúng đang được tải lên.
  • Khi tất cả các khối được lắp ráp, đổi tên tệp
    
    
      
      
    
     
    
    8 trở lại thành những gì nó được cho là.
  • Xong! Bây giờ bạn có một hệ thống có khả năng xử lý các tải lên tệp lớn.

    Phương pháp 3] Tải lên có thể tiếp tục

    3a] HTML & JavaScript

    3a-resumable.html

    
    
      
    // [C] INIT FLOWJS window.onload = [] => { // [C1] NEW FLOW OBJECT var flow = new Flow[{ target: "3c-resumable.php", chunkSize: 1024*1024, // 1MB singleFile: true }]; if [flow.support] { // [C2] ASSIGN BROWSE BUTTON flow.assignBrowse[document.getElementById["upBrowse"]]; // OR DEFINE DROP ZONE // flow.assignDrop[document.getElementById["upDrop"]]; // [C3] ON FILE ADDED flow.on["fileAdded", [file, evt] => { let fileslot = document.createElement["div"]; fileslot.id = file.uniqueIdentifier; fileslot.innerHTML = `${file.name} [${file.size}] - 0%`; document.getElementById["list"].appendChild[fileslot]; }]; // [C4] ON FILE SUBMITTED [ADDED TO UPLOAD QUEUE] flow.on["filesSubmitted", [arr, evt] => flow.upload[]]; // [C5] ON UPLOAD PROGRESS flow.on["fileProgress", [file, chunk] => { let progress = [chunk.offset + 1] / file.chunks.length * 100; progress = progress.toFixed[2] + "%"; let fileslot = document.getElementById[file.uniqueIdentifier]; fileslot = fileslot.getElementsByTagName["strong"][0]; fileslot.innerHTML = progress; }]; // [C6] ON UPLOAD SUCCESS flow.on["fileSuccess", [file, message, chunk] => { let fileslot = document.getElementById[file.uniqueIdentifier]; fileslot = fileslot.getElementsByTagName["strong"][0]; fileslot.innerHTML = "DONE"; }]; // [C7] ON UPLOAD ERROR flow.on["fileError", [file, message] => { let fileslot = document.getElementById[file.uniqueIdentifier]; fileslot = fileslot.getElementsByTagName["strong"][0]; fileslot.innerHTML = "ERROR"; }]; // [C8] PAUSE/CONTINUE UPLOAD document.getElementById["upToggle"]. title = [] => { if [flow.isUploading[]] { flow.pause[]; } else { flow.resume[]; } }; } };

    Bạn nên quen thuộc với phương pháp cuối cùng này - tải lên có thể tiếp tục. Đúng, sẽ không phát minh lại bánh xe. Sử dụng FlowJS ở đây để thúc đẩy tải lên có thể tiếp tục.

    1. HTML chỉ có 3 yếu tố.
      • 
        
          
          
        
         
        
        6 Danh sách tập tin tải lên.
      • 
        
          
        // [C] INITIALIZE UPLOADER window.onload = [] => { // [C1] GET HTML FILE LIST var list = document.getElementById["list"]; // [C2] INIT PLUPLOAD var uploader = new plupload.Uploader[{ runtimes: "html5", browse_button: "pick", url: "2b-chunk.php", chunk_size: "10mb", init: { PostInit: [] => { list.innerHTML = "
        Ready
        "; }, FilesAdded: [up, files] => { plupload.each[files, [file] => { let row = document.createElement["div"]; row.id = file.id; row.innerHTML = `${file.name} [${plupload.formatSize[file.size]}] `; list.appendChild[row]; }]; uploader.start[]; }, UploadProgress: [up, file] => { document.querySelector[`#${file.id} strong`].innerHTML = `${file.percent}%`; }, Error: [up, err] => console.error[err] } }]; uploader.init[]; };
        2 Nút tải lên.
      • 
        
          
        // [C] INITIALIZE UPLOADER window.onload = [] => { // [C1] GET HTML FILE LIST var list = document.getElementById["list"]; // [C2] INIT PLUPLOAD var uploader = new plupload.Uploader[{ runtimes: "html5", browse_button: "pick", url: "2b-chunk.php", chunk_size: "10mb", init: { PostInit: [] => { list.innerHTML = "
        Ready
        "; }, FilesAdded: [up, files] => { plupload.each[files, [file] => { let row = document.createElement["div"]; row.id = file.id; row.innerHTML = `${file.name} [${plupload.formatSize[file.size]}] `; list.appendChild[row]; }]; uploader.start[]; }, UploadProgress: [up, file] => { document.querySelector[`#${file.id} strong`].innerHTML = `${file.percent}%`; }, Error: [up, err] => console.error[err] } }]; uploader.init[]; };
        3 Nút tạm dừng/tiếp tục.
    2. Tải thư viện FlowJS.
    3. Bắt đầu FlowJS, sẽ không chạy qua từng dòng một lần nữa. Nhưng giống như plupload, điều này bắt đầu tải lên sau khi một tệp được chọn. Đọc tài liệu của họ nếu bạn muốn danh sách đầy đủ các cài đặt và sự kiện. Liên kết dưới đây.

    3B] Tải xuống Máy chủ Php Flow

    Tiếp theo, chúng tôi sẽ xây dựng phía máy chủ. Don Tiết cần phải băn khoăn, FlowJS cũng có một thư viện PHP.

    • Tải xuống và cài đặt Trình soạn thảo nếu bạn chưa làm như vậy.
    • Mở dòng lệnh, điều hướng đến thư mục dự án của bạn.
    • Chạy
      php_value upload_max_filesize 150M
      php_value post_max_size 150M
      php_value max_input_time 300
      php_value max_execution_time 300
      2.

    Đó là tất cả. Nhà soạn nhạc sẽ tìm nạp phiên bản mới nhất vào thư mục

    
    
      
    // [C] INITIALIZE UPLOADER window.onload = [] => { // [C1] GET HTML FILE LIST var list = document.getElementById["list"]; // [C2] INIT PLUPLOAD var uploader = new plupload.Uploader[{ runtimes: "html5", browse_button: "pick", url: "2b-chunk.php", chunk_size: "10mb", init: { PostInit: [] => { list.innerHTML = "
    Ready
    "; }, FilesAdded: [up, files] => { plupload.each[files, [file] => { let row = document.createElement["div"]; row.id = file.id; row.innerHTML = `${file.name} [${plupload.formatSize[file.size]}] `; list.appendChild[row]; }]; uploader.start[]; }, UploadProgress: [up, file] => { document.querySelector[`#${file.id} strong`].innerHTML = `${file.percent}%`; }, Error: [up, err] => console.error[err] } }]; uploader.init[]; };
    5.

    3c] Trình xử lý tải lên php

    3c-resumable.php

    Bài Viết Liên Quan

    Chủ Đề