我正在研究在 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, 最后更新: 星期五, 06 七月 2012
因此,由此看来max_input_time
确实会影响文件上传,并且为了确保访问者甚至可以从慢速或移动连接上传 20 MB 的文件,默认值 60 绝对不够!
建议将此值设置为什么?300?
另外,max_execution_time
和max_input_time
之间有什么关系吗?例如,像这样max_execution_time
需要大于max_input_time
?
经过一些快速基准测试后,我认为max_input_time
对处理连接速度慢的用户的大型上传没有任何影响。
从 http://us3.php.net/manual/en/info.configuration.php#ini.max-input-time
这将设置允许脚本解析输入数据(如 POST 和 GET)的最长时间(以秒为单位)。它是从服务器上接收所有数据的那一刻到脚本执行开始测量的。
我使用的是 PHP 5.3.8 并使用以下 .htaccess 配置
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。
我对max_input_time进行了广泛的研究。网络传输时间不是一个因素。PHP作为Apache处理程序(mod_php)或Nginx/PHP-FPM对产生了类似的结果:一旦传输完成,PHP就会获得上传的文件,Web服务器将数据移交给Web服务器。在我的测试中,2 秒max_input_time足以处理 800 MiB 的上传。
所有细节都在 http://blog.hqcodeshop.fi/archives/185-PHP-large-file-uploads.html
这将取决于PHP如何桥接到Web服务器。
从技术上讲,Web服务器可以在拥有请求标头后立即调用PHP - 在这种情况下,PHP将等待POST数据通过互联网,直到它可以填充请求变量(很有可能超过max_input_time)。但更常见的是,Web服务器会延迟PHP的调用,直到它得到完整的请求(超过max_input_time的可能性要小得多)。
5.4 开始,PHP 文件上传肯定会受到max_input_time的影响。我最近在上传超过 60 秒的文件上收到 500 错误。我在 php 中更改了这个值.ini然后它就消失了。
此外,手册中的措辞现在与接受的答案中引用的措辞不同。它现在说:
这将设置允许脚本解析输入数据(如 POST 和 GET)的最长时间(以秒为单位)。计时从在服务器上调用 PHP 的那一刻开始,在执行开始时结束。
我使用的是PHP 5.4.16 nts和IIS 7.5。显然,PHP 是在上传文件之前
调用的。需要注意的一件有趣的事情是我的PHP错误日志给出了错误的错误。他们说"PHP 致命错误:超过 10000 秒的最大执行时间......"。我max_execution_time设置什么并不重要,新号码都会给出相同的错误。