max_input_time是否影响了PHP文件上传?

时间:2012-07-08 22:06:23

标签: php

我正在研究在PHP中设置默认值的最佳值。我已经看到很多关于max_input_time的矛盾点。

这个答案说他认为文件上传不计入计时器: https://stackoverflow.com/a/3758522/518169

在官方PHP文档中,有一个巨大的红色警告说:

  

max_input_time设置脚本的最长时间(以秒为单位)   允许接收输入;这包括文件上传。对于大或   多个文件或较慢连接的用户,默认值为60   可能超过秒数

来源:http://php.net/manual/en/features.file-upload.common-pitfalls.php,最后更新时间:2012年7月6日星期五

因此,似乎max_input_time 会影响文件上传,并确保访问者即使从慢速或移动连接即可​​上传20 MB文件,默认值为60绝对不够!

您建议将此值设置为什么? 300?

此外,max_execution_timemax_input_time之间是否存在任何关系?例如,max_execution_time需要大于max_input_time

4 个答案:

答案 0 :(得分:21)

经过一些快速的基准测试后我认为max_input_time与处理连接速度较慢的用户处理大量上传有任何关系。

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

  

这设置允许脚本解析输入数据的最长时间(以秒为单位),如POST和GET。 从接收服务器上的所有数据到脚本执行开始的那一刻开始计算。

我正在使用PHP 5.3.8并使用以下.htaccess config

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

我的测试脚本是:

<?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>

通过多次试验,我的1.5G文件上传 16-17秒 4-5秒处理,执行时间基本为0。

使用max_input_time 5脚本完成。设置为4后,我们得到PHP Fatal error: Maximum execution time of 4 seconds exceeded in Unknown on line 0, referer: http://localhost/test-upload.php

似乎max_execution_time没有任何影响,因为我们在整个测试中将它保持在1。

答案 1 :(得分:7)

我对 max_input_time 进行了广泛的研究。网络传输时间不是一个因素。 PHP作为Apache处理程序(mod_php)或Nginx / PHP-FPM -pair产生了类似的结果:PHP在传输完成后获取上传的文件,Web服务器将数据交给。在我的测试中,2秒 max_input_time 足以处理800 MiB上传。

所有详情均在http://blog.hqcodeshop.fi/archives/185-PHP-large-file-uploads.html

答案 2 :(得分:6)

这取决于PHP如何桥接到网络服务器。

从技术上讲,网络服务器有可能在它有请求标头后立即调用PHP - 在这种情况下,PHP会在等待POST数据通过互联网直到它可以填充请求变量时使用它。很可能会超过max_input_time)。但更常见的情况是,Web服务器会延迟PHP的调用,直到它有完整的请求(不太可能超过max_input_time)。

答案 3 :(得分:2)

从PHP 5.4开始,PHP文件上传肯定会受到max_input_time的影响。我最近在上传时间超过60秒的文件上收到500错误。我在php.ini中更改了这个值,它就消失了。

此外,手册中的措辞现在与接受的答案中引用的措辞不同。它现在说:

  

这设置允许脚本解析输入数据的最长时间(以秒为单位),如POST和GET。在服务器调用PHP时,时间开始,并在执行开始时结束。

我使用的是PHP 5.4.16 nts和IIS 7.5。显然,在上传文件之前会调用PHP。

有一点需要注意的是我的PHP错误日志给出了错误的错误。他们声称&#34; PHP致命错误:超过10000秒的最大执行时间......&#34;。我设置max_execution_time并不重要,它会给新号码带来同样的错误。