在PHP中增加max_execution_time?

22

我试图将大文件上传到我的服务器(我的服务器支持post_max_size 192mb和max_execution_time 600秒)。当我上传100mb的文件时,执行会在600秒后停止,因此文件无法上传到服务器。如何在PHP中增加max_execution_time(仅针对文件上传过程)?我已经尝试过:

ini_set ( 'max_execution_time', 1200); 
if(move_uploaded_file($_FILES['Video']['tmp_name'],$tmppath)) {
  // ...
} 

你有什么想法可以克服这个问题吗?


1
600秒后会发生什么事情?你会收到哪个错误信息?上传时间不计入PHP时间限制。 - Pekka
2
尝试使用 set_time_limit() - bfavaretto
@Ajay Chthri:如果你想上传一些较大的文件,可以尝试使用一些上传工具,例如Java Applet Uploader。 - Muthu Krishnan
我也遇到了同样的问题,它给了我“页面未找到”的错误提示。我正在使用Codeignitier从另一个表中将文件名插入到一个表中,请帮帮我。 - saadk
5个回答

38

将以下代码添加到.htaccess文件中(下方已加入编辑说明):

<IfModule mod_php5.c>
   php_value post_max_size 200M
   php_value upload_max_filesize 200M
   php_value memory_limit 300M
   php_value max_execution_time 259200
   php_value max_input_time 259200
   php_value session.gc_maxlifetime 1200
</IfModule>

其他资源和信息:


2021年更新:

随着PHP和Apache的发展壮大,我认为有必要提及一些要考虑的事情以及可能遇到的问题:

  • PHP可以作为模块或CGI运行。不建议以CGI形式运行,因为这会创建许多攻击向量【阅读更多】。以模块形式运行(更安全的选项)将触发从<IfModule加载的特定模块使用的设置。
  • 答案指示在第一行中编写mod_php5.c。如果您正在使用PHP 7,则应将其替换为mod_php7.c
  • 有时,在更改.htaccess文件后,重新启动Apache或NGINX无效。最常见的原因是您正在运行PHP-FPM【阅读更多】,它作为单独的进程运行。您也需要重新启动它。
  • 请记住,这些通常是在您的php.ini配置文件中定义的设置。如果您的托管提供商不允许您更改这些文件,则此方法通常只有在必要时才有用。在可以编辑PHP配置的情况下,建议您将这些设置应用于那里。
  • 最后,需要注意的是,并非所有php.ini设置都可以通过.htaccess文件进行配置。可以找到php.ini指令列表在此处,您只能更改可更改列中带有 PHP_INI_ALL PHP_INI_PERDIR 模式的设置。

或者直接在您的 php.ini 文件中更改这些值。 - Danny Beckett
@Jeremy Harris,那个编辑过的链接现在已经失效了。请更新一下... - MwamiTovi
你编辑的链接出现了403禁止访问的错误。我会尝试寻找另一个资源。 - Jeremy Harris
我刚才更新了这个答案,并添加了更多相关信息,因为它似乎仍然吸引了很多观众,即使过去已经快十年了。 - Jeremy Harris

6

许多网络服务器(在Apache上)都有一个名为max_input_time的设置,它定义了无论大小如何,它们将等待多长时间以获取POST数据。如果此时间耗尽,连接将被关闭甚至不会触及php。

因此,您的问题不一定只能通过PHP解决,而是需要同时更改服务器设置。


刚才我检查了我的服务器,支持最大执行时间为30分钟,但当我上传30MB的文件时,处理过程会在10分钟后停止(查询未执行)。 - Chithri Ajay
你需要担心的不是执行时间,而是输入时间。如果你能在不到10分钟的时间内上传那30MB的文件,程序就可以运行。但如果你只上传了200KB,却需要11分钟的时间,程序也无法运行。此时,问题并不取决于文件大小或执行时间,而是取决于你上传文件所需的时间。 - bardiir
1
所以我们需要增加 max_input_time 吗? - Chithri Ajay

2
这很简单,对我而言可行: PHP:
set_time_limit(300); // Time in seconds, max_execution_time

这里是PHP的文档,有关设置时间限制的信息。最初的回答。

0
// Karvy master upload module
function uploadKarvyData()
{
    ini_set('MAX_EXECUTION_TIME', -1);
    ini_set('memory_limit', '-1');  
    or
    ini_set( 'memory_limit', '1024M' );
    ini_set('upload_max_filesize', '1024M'); 
    ini_set('max_input_time', 360000);  
    ini_set('max_execution_time', 360000);
}

我相信如果您向我们解释为什么您的代码可以解决 OP 的问题,那么这肯定会对社区有所帮助。 - Simas Joneliunas

0
为了增加执行时间和文件大小,您需要在您的.htaccess文件中提及以下值。它会起作用。
php_value upload_max_filesize 80M
php_value post_max_size 80M
php_value max_input_time 18000
php_value max_execution_time 18000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接