【问题标题】:How to increase the execution timeout in php?如何增加php中的执行超时?
【发布时间】:2010-09-30 09:40:11
【问题描述】:

如何增加事务超时?我想上传视频,但是大尺寸的视频没有上传?

它抛出错误The process *** exceeded the timeout of 60 seconds.

【问题讨论】:

  • 定义“事务超时”。什么在哪里不起作用?
  • 为什么你认为它的“交易”超时?
  • 短视频上传成功。但是长视频没有上传,我想超时了。
  • ini_set('post_max_size','200M'); ini_set('upload_max_filesize','200M'); ini_set('max_execution_time','200M'); ini_set('max_input_time','200M'); ini_set('memory_limit','200M'); set_time_limit(65536);
  • 最好先拆分文件再上传。有许多应用程序可以使用。我更喜欢plupload。

标签: php


【解决方案1】:

您需要更改 php.ini 中的一些设置:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must - sets the maximum time in seconds

您的 PHP.ini 所在的位置取决于您的系统环境。更多信息:http://php.net/manual/en/ini.list.php

【讨论】:

  • 对不起,我不知道你的意思是什么:(
  • @Aamir,您需要获得您的虚拟主机的许可才能更改您的网络服务器的配置。通常,他们不会让你改变那样的东西。
  • 我可以更改 htaccess 文件中的 upload_max_filesize 和 max_execution_time 吗?
  • @Col ,我不同意,他想即时进行更改,而不是对整个应用程序进行更改,所以他问他如何做到这一点。即使他要问他如何才能更改 php.ini 中的某些内容,这可能是一个新手问题,但仍然是一个合法的问题。
  • @IulianOnofrei 好吧,只是觉得有必要指出这一点 :D,但也许如果你不知道什么是最好的,那就去看看吧……“那些不能从历史中吸取教训的人是注定要重蹈覆辙”等等……
【解决方案2】:

您应该也可以在运行时使用

set_time_limit(100);

http://php.net/manual/en/function.set-time-limit.php

或在您的虚拟主机配置中

php_admin_value max_execution_time 10000

对于不太可靠的应用程序的性能原因,将全局执行时间限制设置为 LOW 是一个好主意。因此,您可能只想让那些脚本运行得更长一些。

p.s.:不要忘记 post_max_size 和 upload_max_filesize (就像第一个答案所说的那样)

【讨论】:

  • 如果你设置了,sleep 会被忽略
【解决方案3】:

完成汉内斯的回答。

您需要更改 php.ini 中的一些设置:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

如果有人想无限次输入(我不知道为什么,但如果你愿意),你可以将时间设置为 0:

您需要更改 php.ini 中的一些设置:

upload_max_filesize = 0 

max_execution_time = 0

如果你不知道你的 php.ini 在哪里。您可以在您的服务器中创建一个文件“name.php”并放入:

<?php phpinfo(); ?>

在您的网站上,您可以看到 php.ini 的配置,并标明它在哪里。

2015 年 1 月 9 日编辑:

如果您无法访问您的 php.ini,您还有两个选择。

您可以直接在“name.php”文件中设置此行,但我找不到该选项的 upload_max_filesize:

set_time_limit(0);

或在“.htaccess”中

php_value upload_max_filesize 0
php_value max_execution_time 0

【讨论】:

    【解决方案4】:

    如果您需要做的只是 1 或 2 页,我建议使用set_time_limit,这样它不会影响整个应用程序。

    set_time_limit(some_values);
    

    但当然这 2 个值(post_max_size 和 upload_max_filesize)需要调查。

    你可以通过ini_set函数设置它

    ini_set('post_max_size','20M');
    ini_set('upload_max_filesize','2M');
    

    或直接在 php.ini 文件中,如 Hannes 上面的响应,甚至在 .htaccess 中设置它,如下所示

    php_value upload_max_filesize 2M
    php_value post_max_size 20M
    

    【讨论】:

      【解决方案5】:

      如果你碰巧使用的是Microsoft IIS服务器,除了别人提到的php.ini设置,你可能需要增加执行超时设置IIS 服务器管理器中的 PHP FastCGI 应用程序:

      步骤 1) 打开 IIS 服务器管理器(通常在开始菜单中的 服务器管理器 下,然后是 工具 / Internet 信息服务 (IIS) 管理器 em>)。

      第 2 步)单击主连接(不特定于任何特定域)。

      第 3 步)在 IIS 部分下,找到 FastCGI 设置(如下所示)。

      步骤 4) 在其中,右键单击 PHP 应用程序并选择 Edit...

      第 5 步)检查超时(如下所示)。

      在我的例子中,这里的默认超时时间是 70 秒和 90 秒;前者导致 PHP 脚本出现 500 内部服务器错误,耗时超过 70 秒。

      【讨论】:

        【解决方案6】:

        作为上述答案的补充,您可以使用set_time_limit()函数:

        http://php.net/manual/en/function.set-time-limit.php

        0 作为参数传递将使您的脚本无时间限制地运行。

        【讨论】:

        • set_time_limit() 与文件上传无关
        • 这不够准确,上校弹片。在 Unix 环境下,最大执行时间与 php 线程使用的累积 CPU 时间进行比较,而在 Windows 系统上则使用绝对时间。上传主要是“空闲时间”(IO-Wait)。但正如您所见,即使上传时间过长,上传也会停止。
        【解决方案7】:

        如果您无法编辑 php.ini(例如在您的服务器上),您可以尝试从您的 php 代码中更改 php.ini 参数。试试:

        ini_set('max_execution_time', 'NUMBER OF SECONDS TO ALLOW BEFORE TIMEOUT');
        

        如果这不起作用,请尝试以相同的方式设置“set_time_limit”,除此之外,我想说您唯一的选择是联系您的主机。在安全模式下无法修改这些设置。

        【讨论】:

        • Hannes 在我发布前一分钟得到了这个,并正确指出 set_time_limit() 不应由 ini_set 设置,如本答案所述,而是将秒数放在括号中。投票赞成。
        【解决方案8】:

        您打错了:ini_set('max_input_time','200M') - 值集必须是 int,例如 ini_set('max_input_time','200')

        【讨论】:

          【解决方案9】:

          我知道您专门询问 PHP 超时,但似乎没有其他人提到的是网络服务器上也可能存在超时,它看起来与 PHP 超时非常相似。

          所以如果你尝试过:

          1. 通过添加一行来增加 php.ini 中的超时时间:max_execution_time = {秒数,即一分钟 60 秒}
          2. 通过添加以下内容来增加脚本本身的超时时间:ini_set('max_execution_time','{number of seconds i.e. 60 for one minute}');

          您已经使用 phpinfo() 函数检查了 max_execution_time 确实增加了,那么您可能想尝试将其添加到 .htaccess 中,这将确保 Apache 本身不会超时:

          RewriteRule .* - [E=noabort:1]
          RewriteRule .* - [E=noconntimeout:1]
          

          更多信息在这里: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/

          【讨论】:

            【解决方案10】:

            首先通过phpinfo()检查php.ini文件路径;然后改PHP.INI参数:

            upload_max_filesize = 1000M
            memory_limit = 1500M
            post_max_size = 1500M
            max_execution_time = 30
            

            重启 Apache

            set_time_limit(0); // safe_mode is off
            
            ini_set('max_execution_time', 500); //500 seconds
            

            注意:在Linux中也可以使用命令查找php.ini

            locate `php.ini`
            

            【讨论】:

              【解决方案11】:

              测试您是否处于安全模式 - 如果不是 - 将时间限制(本地值)设置为您想要的:

              if(!ini_get('safe_mode')){
              
                  echo "safe mode off";
                  set_time_limit(180);// seconds
              
                  phpinfo();// see 'max_execution_time'
              }
              

              *如果安全模式“开启”,则无法以这种方式设置时间限制。

              【讨论】:

                【解决方案12】:

                可选:如果你设置了关于 php.ini 的配置但仍然无法上传

                -这是检查错误代码的php函数

                $error_type = [];
                $error_type[0] = "There is no error";
                $error_type[1] = "The uploaded file exceeds the upload_max_filesize directive in php.ini.";
                $error_type[2] = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
                $error_type[3] = "The uploaded file was only partially uploaded.";
                $error_type[4] = "No file was uploaded.";
                //$error_type["5"] = "";
                $error_type[6] = "Missing a temporary folder. Introduced in PHP 5.0.3.";
                $error_type[7] = "Failed to write file to disk. Introduced in PHP 5.1.0.";
                $error_type[8] = "A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with phpinfo() may help. Introduced in PHP 5.2.0.";
                //------------------------------
                //--> show msg error.
                $status_code = $_FILES["uploadfile"]["error"];
                if($status_code != 0){
                    echo $error_type[$status_code];
                    exit;
                }
                

                【讨论】:

                  【解决方案13】:

                  您还可以在 .htaccess 文件中设置最大执行时间:

                  php_value max_execution_time 180
                  

                  【讨论】:

                    【解决方案14】:

                    要真正增加时间限制,我更喜欢首先获取当前值。 set_time_limit 并不总是增加时间限制。如果当前值(例如来自php.ini 或以前设置的值)高于当前调用set_time_limit 中使用的值,它将减少时间限制!

                    那么像这样的小帮手有什么用呢?

                    /**
                     * @param int $seconds Time in seconds
                     * @return bool
                     */
                    function increase_time_limit(int $seconds): bool
                    {
                        return set_time_limit(max(
                            ini_get('max_execution_time'), $seconds
                        ));
                    }
                    
                    // somewhere else in your code
                    increase_time_limit(180);
                    

                    另请参阅:Get max_execution_time in PHP script

                    【讨论】:

                      猜你喜欢
                      • 2020-07-14
                      • 2020-04-16
                      • 2018-01-02
                      • 1970-01-01
                      • 2013-04-05
                      • 2011-12-06
                      • 2013-04-16
                      相关资源
                      最近更新 更多