用法测试详解,php页面函数设置超时限制的方法
分类:新闻中心

对此函数大家得以常用上边方法,直接给函数设置超时时间。

本文实例呈报了php页面函数设置超时间限制制的主意。分享给我们供大家参照他事他说加以考察。具体方法如下:

到php官方查看此函数表达

三个php脚本通过crontab每5分钟实行三遍,思考到脚本实践时间会当先5分钟,特意用set_time_limit(290)来调控脚本在290秒退出。某天蓦地开采后台有七个该脚本的经过在实践,也正是说set_time_limit(290)未有起效果。为了求证,特意利用如下代码测量检验。

 代码如下

逾越页面程序实行超时时会提醒Fatal error: 马克西姆um execution time of 300 seconds exceeded 是因为程序试行时间超越了最大允许施行时间,化解办法大家计算了多少个供大家选用.

pcntl_alarm (PHP 4 >= 4.3.0, PHP 5)

 代码如下

declare(ticks = 1);
    function a(){
    sleep(10);
    echo "a finishi ";
}
function b(){
    echo "Stop ";
}
function c(){
    usleep(100000);
}
 
function sig(){
    throw new Exception;
}
 
try{
    pcntl_alarm(1);
    pcntl_signal(SIGALRM, "sig");
    a();
    pcntl_alarm(0);
}catch(Exception $e){
    echo "timeout ";
}
 
b();
a();
b();

对此函数大家能够常用上面方法,直接给函数设置超时时间来操作,代码如下:

pcntl_alarm — 为经过设置三个alarm石英钟连续信号

set_time_limit(5);

来操作

复制代码 代码如下:

说明¶int pcntl_alarm ( int $seconds )

for ($i = 0; $i < 100; $i++) {
    echo date('Y-m-d H:i:s') . "n";
    sleep(1);
}

对此文本或程序代码可利用set_time_limit只是安装你的PHP程序的逾期时间

declare(ticks = 1);
    function a(){
    sleep(10);
    echo "a finishi ";
}
function b(){
    echo "Stop ";
}
function c(){
    usleep(100000);
}
 
function sig(){
    throw new Exception;
}
 
try{
    pcntl_alarm(1);
    pcntl_signal(SIGALRM, "sig");
    a();
    pcntl_alarm(0);
}catch(Exception $e){
    echo "timeout ";
}
b();
a();
b();

创制三个计时器,在内定的秒数后向进度发送叁个SIGALRM非复信号。每便对 pcntl_alarm()的调用都会打消从前安装的alarm时限信号。

甭管在web依然CLI下,上述脚本并未在5分钟后脱离。后来拉长ini_set(‘max_execution_time’, 5)测量检验,结果一律。这是还是不是注脚set_time_limit函数根本就从未有过用吧?其实不然,在 这里找到来源所在,其实是上边的写法有标题,举例利用下述代码:

不留余地办法:

对此文本或程序代码可应用set_time_limit只是设置你的PHP程序的晚点时间.
缓和方法:

参数¶seconds 等待的秒数。借使seconds设置为0,将不会创设alarm实信号。

 代码如下

  1. 修改php.ini文件:

1.修改php.ini文件,代码如下:

归来值¶重回上次alarm调治(离alarm信号发送)剩余的秒数,或许此前从未alarm调解(译注:可能此前调整已成功) 时再次回到0。

set_time_limit(5);

 代码如下

复制代码 代码如下:

实例

for (;;) {
}

 
max_execution_time = 30     ; // Maximum execution time of each script, in seconds

max_execution_time = 30; // Maximum execution time of each script, in seconds 原值30秒,你能够改大点.

 代码如下

实行后,大约5分钟即可知见”Fatal error: 马克西姆um execution time of 5 seconds exceeded in”类似这样的错误提醒。表明set_time_limit是起功能的。未来在去走访官方文书档案(

原值30秒,你可以改大点。

改完后记得重启php,该措施改了后对富有程序生效.

<?php
declare(ticks = 1);
function a()
{
    sleep(10);
    echo "a finishin";
}
function b()
{
    echo "Stopn";
}
function c()
{
    usleep(100000);
}
 
function sig()
{
    throw new Exception;
}
 
try
{
    //设置二个挂钟连续信号为一秒钟试行二次
    pcntl_alarm(1);
    //安装石英钟数字信号,并绑定callback
    pcntl_signal(SIGALRM, "sig");
    a();
    //打消机械钟时限信号
    pcntl_alarm(0);
}
catch(Exception $e)
{
    echo "timeoutn";
}
 
b();
a();
b();

The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running. This is not true on Windows where the measured time is real.

改完后纪念重启php。该办法改了后对具备程序生效。

2.更换你的次第,在您须要耗费时间超越暗中认可值(30秒)的脚本中,参与代码:

附,pcntl扩张安装

  1. 修改你的程序,在你要求耗费时间超越暗许值(30秒)的台本中,加入代码:

复制代码 代码如下:

pcntl扩张能够支持php的多线程操作.

 

 代码如下

set_time_limit(300); // 最大实行时间这里安装300秒

原来要求重新编写翻译PHP的背后configrue提醒加上--enable-pcntl

 代码如下

 
set_time_limit(300);   // 最大实践时间这里安装300秒

安装成0表示不限制时间。

为了省事直接编写翻译算鸟.

<?php
//set_time_limit(0);
$i=1500;
include ("inc/conn.php");
while($i>0)
{
$sql="INSERT INTO php (php)
VALUES ('$i')";
if ($conn->execute($sql)===flase)
{
//echo "数据插入错误".$conn->errormsg();
}
else
{
$phpid=$conn->Insert_ID();
echo $i."已经存入数据库,编号:".$phpid;
}
$i--;
echo "<hr>";
}
?>

设置成0表示不限制期限。

期望本文所述对大家的PHP程序设计具备助于。

 代码如下

只顾:sleep函数暂停的小运也是不计入脚本的实践时间的。所以也是首先个测量试验退步的来头。

 

您只怕感兴趣的篇章:

  • 安装ASP.NET页面的运作超时时间详细到单个页面及站点
  • 签到超时给出提醒跳到登入页面(ajax、导入、导出)
  • php设置页面超时时间消除办法
  • JS达成页面超时后自动跳转到登入页面
  • ajax提交session超时跳转页面使用全局的秘技来管理
  • .net让线程协助过期的艺术实例和线程在实践完结后销毁的不二等秘书籍
  • Asp.Net各样超时难点总计
  • Asp中Server.ScriptTimeOut属性需求专一的少数解析
  • 超越了剧本运转的最长日子..Server.Script提姆eOut 属性钦定新值
  • ASP.NET页面诉求超时时间设置各个艺术

# cd /usr/local/src/php-5.2.6/ext/pcntl
# phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install

当你的页面有大批量数量时,提出利用set_time_limit()来决定运营时刻,暗中同意是30s,所以需求您将试行时间加长点,如 set_time_limit(300)  ,其少校秒数设为0 ,表示持续运营!

pcntl.so  加到php.ini中OK

如:set_time_limit(0)表示长日子链接运营!

在乎:那个函数的运作需求您关闭安全情势,在php.ini校官safe_mode = Off 安全形式设置为Off,不然将会出现上面错误:

Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in

重复注意的是:

在php.ini能够因此定义max_execution_time来设置PHP页面包车型客车最大试行时间,比方下边:

 代码如下

set_time_limit(900);

以此函数钦定了近来所在php脚本的最大施行时间,
虽说设定值是900秒,实际上
最大实施时间=php.ini里的max_execution_time数值 - 当前脚本已经推行的时光 + 设定值
假如php.ini里的max_execution_time=30,当前脚本早就实行10秒,则:
最大实行时间=30-10+900=920秒。

php中设置set_time_limit不起成效的消除措施:

set_time_limit用来设置脚本的逾期时间,用法如下:

set_time_limit(秒数);
规定从该句运维时初始后必须在钦定秒数内运营结束,
逾期则程序出错退出.
可是有的时候设置set_time_limit未有效果与利益,set_time_limit函数最棒是在linux下进行,windows实践只怕也对事情未有什么益处
涸泽而渔办法:
修改php.ini里的max_execution_time = 30了。这么些私下认可是30秒,修改为max_execution_time = 300.重复起动apache服务器。那样超时设置为300秒就有提醒音信了.

本文由美高梅网址发布于新闻中心,转载请注明出处:用法测试详解,php页面函数设置超时限制的方法

上一篇:PHP可变函数学习小结,可变函数使用小结 下一篇:没有了
猜你喜欢
热门排行
精彩图文