2012-07-08 26 views
27

Tôi đang xem giá trị tốt nhất để đặt cho các giá trị mặc định bằng PHP là gì. Tôi đã nhìn thấy nhiều điểm mâu thuẫn về max_input_time.Tải lên tệp PHP bị ảnh hưởng hay không bởi max_input_time?

Câu trả lời này nói rằng ông tin rằng tập tin tải lên không được tính vào giờ: https://stackoverflow.com/a/3758522/518169

Trong khi trên tài liệu PHP chính thức, có được một cảnh báo màu đỏ khổng lồ nói:

max_input_time sets the maximum time, in seconds, the script is allowed to receive input; this includes file uploads. For large or multiple files, or users on slower connections, the default of 60 seconds may be exceeded

Nguồn: http://php.net/manual/en/features.file-upload.common-pitfalls.php, cập nhật lần cuối: Fri, 06 Jul 2012

Vì vậy, từ điều này có vẻ như max_input_timekhông ảnh hưởng đến tệp tải lên và để chắc chắn rằng khách truy cập có thể tải lên nói 20 MB tệp ngay cả từ kết nối chậm hoặc di động, giá trị mặc định của 60 chắc chắn là không đủ!

Bạn khuyên bạn nên đặt giá trị này thành gì? 300?

Ngoài ra, có mối quan hệ nào giữa max_execution_timemax_input_time không? Ví dụ như số max_execution_time cần phải lớn hơn max_input_time?

+0

Tôi gặp một số sự cố khi tải lên các tệp lớn và thời gian chờ của Apache, nhưng với PHP thì không. –

+0

Thú vị đủ Tôi gặp vấn đề tương tự trong một thời gian trên một trong những nhà cung cấp hosting của tôi và mặc dù mọi thứ trong cấu hình PHP có vẻ như tải lên lớn trên các kết nối chậm hơn dẫn đến Lỗi HTTP Máy chủ nội bộ 'HTTP/1.1 500'. Bây giờ tôi đã thấy câu nói đó trong câu trả lời đầu tiên, tôi bắt đầu tự hỏi đó là cái gì. Sẽ theo dõi chặt chẽ chủ đề này và cố gắng tự mình đào một thứ gì đó. – brezanac

Trả lời

20

Sau khi một số điểm chuẩn nhanh Tôi không tin max_input_time có bất kỳ ảnh hưởng nào đến việc xử lý tải lên lớn bởi người dùng có kết nối chậm.

Từ http://us3.php.net/manual/en/info.configuration.php#ini.max-input-time

This sets the maximum time in seconds a script is allowed to parse input data, like POST and GET. It is measured from the moment of receiving all data on the server to the start of script execution.

Tôi đang sử dụng PHP 5.3.8 và sử dụng các cấu hình .htaccess sau

php_value max_input_time 5 
php_value max_execution_time 1 
php_value upload_max_filesize "2048M" 
php_value post_max_size "2048M" 

kịch bản thử nghiệm của tôi là:

<?php 
if (!empty($_FILES)) { 
    echo '<pre>'; 
    var_dump($_FILES); 
    echo '</pre>'; 
} 
?> 
<form enctype="multipart/form-data" method="POST"> 
    File: <input name="userfile" type="file" /> 
    <input type="submit" value="Upload" /> 
</form> 

Với nhiều thử nghiệm tệp 1.5G của tôi mất khoảng 16-17 giây để tải lên, 4-5 giây để xử lý và thời gian thực thi về cơ bản là 0.

Với tập lệnh hoàn thành. Với nó được đặt thành 4 chúng tôi nhận được PHP Fatal error: Maximum execution time of 4 seconds exceeded in Unknown on line 0, referer: http://localhost/test-upload.php

Nó cũng có vẻ như max_execution_time không mang vì chúng tôi giữ nó ở 1 trong suốt các thử nghiệm.

+0

Chính xác những gì tôi đang tìm kiếm. Cảm ơn! –

+6

Chỉ muốn nói, câu trả lời này là không chính xác. Trong những trường hợp hiếm hoi, kết nối chậm sẽ khiến bạn bị lỗi đường ống bị hỏng. Tôi vừa sửa nó ngày hôm nay, và đó là thiết lập max_input_time thành 600. và bây giờ tôi đang googling cách tính max_input_time, nhưng chỉ thấy câu trả lời sai. –

+0

@ BenP.P.Tung, Điều này rất quan trọng. Vui lòng thêm các chi tiết khác. – Pacerier

5

Nó sẽ phụ thuộc vào cách PHP được bắc cầu với máy chủ web. Về mặt kỹ thuật, máy chủ web có thể gọi PHP ngay khi nó có các tiêu đề yêu cầu - trong trường hợp đó PHP sẽ là twiddling, ngón tay cái của nó chờ đợi dữ liệu POST đi qua internet cho đến khi nó có thể điền các biến yêu cầu (nó hoàn toàn có thể là max_input_time sẽ bị vượt quá). Nhưng phổ biến hơn, máy chủ web sẽ trì hoãn việc triệu gọi PHP cho đến khi nó có yêu cầu đầy đủ (ít nhiều khả năng là max_input_time wil bị vượt quá).

+2

Chăm sóc để cung cấp thêm bất kỳ đọc về chủ đề này? Đây là lần đầu tiên tôi nhận được một tuyên bố rằng việc xử lý PHP được gọi ngay tại đầu yêu cầu, do đó ảnh hưởng đến 'max_input_time'. Cảm ơn. – brezanac

+0

@symcbean, ** ** Triển khai nào thực hiện điều đó? Nghe không giống như một cách tốt để lớp ứng dụng kể từ khi kịch bản PHP bây giờ sẽ cần phải bận tâm chính nó với những thứ như kết nối bị hỏng nửa chừng và vv – Pacerier

+0

Tôi có thể xác nhận rằng điều này không xảy ra. Tôi đã nhận được lỗi 500 trên các tệp lớn mất hơn 60 giây để tải lên.Tôi chỉ thay đổi max_input_time và nó đã sửa nó. Không chỉ vậy, các hướng dẫn sử dụng php bây giờ có từ ngữ khác nhau hơn so với trích dẫn ở trên. Nó bây giờ nói thời gian bắt đầu "tại thời điểm PHP được gọi tại máy chủ", thay vì "từ thời điểm nhận được tất cả dữ liệu trên máy chủ." Bạn có thể đọc tại đây: http://goo.gl/FTfsD3. Điều kỳ lạ là lỗi trong các bản ghi PHP cho biết max_execution_time đã đạt được, ngay cả khi tôi đặt nó là 10000. – dallin

7

Tôi đã nghiên cứu sâu rộng trên max_input_time. Thời gian truyền mạng không phải là một yếu tố.PHP như Apache handler (mod_php) hoặc Nginx/PHP-FPM-pair mang lại kết quả tương tự: PHP nhận tệp được tải lên sau khi quá trình chuyển hoàn tất và máy chủ web đưa dữ liệu lên. Trong thử nghiệm của tôi 2 giây max_input_time đủ để xử lý tải lên 800 MiB.

Tất cả các chi tiết có tại http://blog.hqcodeshop.fi/archives/185-PHP-large-file-uploads.html

1

Tính đến PHP 5.4, tập tin tải lên PHP chắc chắn có thể bị ảnh hưởng bởi max_input_time. Gần đây, tôi đã nhận được lỗi 500 trên các tệp mất hơn 60 giây để tải lên. Tôi đã thay đổi giá trị này trong php.ini của tôi và nó đã biến mất.

Ngoài ra, từ ngữ trong sách hướng dẫn khác với từ được trích dẫn trong câu trả lời được chấp nhận. Nó bây giờ nói:

This sets the maximum time in seconds a script is allowed to parse input data, like POST and GET. Timing begins at the moment PHP is invoked at the server and ends when execution begins.

Tôi đã sử dụng PHP 5.4.16 nts và IIS 7.5. Rõ ràng, PHP được gọi trước khi tệp được tải lên.

Một điều thú vị cần lưu ý là nhật ký lỗi PHP của tôi đã đưa ra lỗi sai. Họ đã nói "Lỗi nghiêm trọng về PHP: Thời gian thực hiện tối đa 10.000 giây đã vượt quá trong ...". Nó không quan trọng những gì tôi đặt max_execution_time đến, nó sẽ cung cấp cho cùng một lỗi với số mới.

Các vấn đề liên quan