增加 PHP 的最大执行时间

60

我已经添加了 set_time_limit(0); 函数来增加执行时间,但最多只执行2-3分钟。

error_reporting(E_ALL);
error_reporting(1);
set_time_limit(0);

我想从一个加载时间很长的网站中搜索链接。

8个回答

222

PHP文件(例如,my_lengthy_script.php)

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

.htaccess文件

<IfModule mod_php5.c>
php_value max_execution_time 300
</IfModule>

更多配置选项

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

如果使用WordPress,则需在config.php文件中进行设置,

define('WP_MEMORY_LIMIT', '128M');

如果是Drupal,则需要编辑 sites/default/settings.php 文件。

ini_set('memory_limit', '128M');

如果您正在使用其他框架,

ini_set('memory_limit', '128M');

你可以增加内存,例如千兆字节

ini_set('memory_limit', '3G'); // 3 Gigabytes

259200 的意思是:

( 259200/(60x60 minutes) ) / 24 hours ===> 3 Days

更多细节请查看我的博客


1
有趣的是,这也适用于Suhosin“加固”的PHP环境。 - Michael Robinson
这个能在我托管网站的生产服务器上运行吗?我已经尝试过了,但是没有成功。所以我很困惑,也许主机提供商将他们的max_execution_time设置为30秒,可能这就是为什么示例没有工作的原因。 - Aitazaz Khan
1
@SumithHarshan,这个ini_set('max_execution_time', 300); //300秒=5分钟是否只对脚本(一次性)有效,还是会永久更改php.ini的默认值? - Hytool
1
好的,明白了。ini_set函数设置给定配置选项的值。该配置选项将在脚本执行期间保持此新值,并在脚本结束时恢复为原始值。无论如何,谢谢! - Hytool

10

在您的htaccess文件中添加这些代码。我希望它可以解决您的问题。

<IfModule mod_php5.c>
php_value max_execution_time 259200
</IfModule>

259200是什么意思?秒数吗? - Vishnu Sureshkumar
259200/60= 4320 分钟 4320/60= 72 小时 72/24= 3 天 - PJunior

3

由于您使用的是共享服务器,您无法对此做任何事情。通常,他们会设置最大执行时间,以防止您覆盖它。我建议您联系他们。


1

使用 mod_php7.c 替代 mod_php5.c 以适用于 PHP 7

示例

<IfModule mod_php7.c>
   php_value max_execution_time 500
</IfModule>

1

嗯,有两种方法可以更改max_execution_time。
1. 您可以直接在php.ini文件中设置它。
2. 其次,您可以在您的代码中添加以下行。

ini_set('max_execution_time', '100')

0

这是一个老问题,但如果有人今天找到它,那么很可能是通过php-fpm和mod_fastcgi运行php。在这种情况下,因为Apache将终止连接到30秒内没有输出任何内容的进程,所以这里没有任何东西可以帮助扩展执行时间。唯一的方法是更改apache(模块/站点/虚拟主机)配置中的-idle-timeout。

FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /run/php/php7.0-fpm.sock -idle-timeout 900 -pass-header Authorization

更多细节 - 增加 PHP-FPM 空闲超时设置


0

你的 Web 服务器可能设置了限制。一些浏览器/代理也会实现超时。通过 HTTP 请求调用长时间运行的进程只是愚蠢的做法。解决问题的正确方法(假设你无法使处理速度更快)是使用 HTTP 请求触发 Web 服务器会话组外的处理,然后通过 HTTP 轮询状态,直到获得结果集。


能否提供一个示例来说明这个答案?你是指一个不是 HTTP 请求的进程吗?比如可执行文件? - TARKUS
“类似可执行文件?”- 没有太多意义。在这个论坛上举例会过于复杂 - 一种方法是使用守护进程,另一种方法是创建一个分离的进程(http://symcbean.blogspot.co.uk/2010/02/php-and-long-running-processes.html)。我确实找了好的守护进程示例 - 但只找到了很多糟糕的示例(提示:应该关闭其stdio,fork和setsid)。 - symcbean

0
尝试将max_execution_time设置为更长的时间:
<IfModule mod_php5.c>
    php_value max_execution_time 300
</IfModule>

<IfModule mod_php7.c>
    php_value max_execution_time 300
</IfModule>

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