31

我正在研究在 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_time另外,和之间有什么关系max_input_time吗?例如,max_execution_time需要大于max_input_time

4

4 回答 4

21

经过一些快速的基准测试后,我认为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。

于 2012-07-09T13:04:43.193 回答
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

于 2014-03-20T09:01:45.850 回答
6

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

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

于 2012-07-09T13:43:31.037 回答
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 错误日志给出了错误的错误。他们说“PHP 致命错误:超过 10000 秒的最大执行时间...”。我将 max_execution_time 设置为什么并不重要,它会给新数字带来相同的错误。

于 2016-01-14T17:08:02.780 回答