Gra*_*it 15 php time runtime execution limit
嗨有可能只为命令设置时间限制或仅设置功能,例如:
function doSomething()
{
//..code here..
function1();
//.. some code here..
}
Run Code Online (Sandbox Code Playgroud)
我想只为function1设置时间限制.
有退出set_time_limit但我认为这设置了整个脚本的时间限制.有人有什么想法吗?
Ali*_*man 20
set_time_limit()确实全局运行,但可以在本地重置.
设置允许脚本运行的秒数.如果达到此值,脚本将返回致命错误.默认限制为30秒,如果存在,则为php.ini中定义的max_execution_time值.
调用时,
set_time_limit()从零开始重启超时计数器.换句话说,如果超时是默认的30秒,并且脚本执行25秒,则进行诸如set_time_limit(20)之类的调用,脚本将在超时之前运行总共45秒.
我没有测试它,但你可以在本地设置它,当你离开时重置
<?php
set_time_limit(0); // global setting
function doStuff()
{
set_time_limit(10); // limit this function
// stuff
set_time_limit(10); // give ourselves another 10 seconds if we want
// stuff
set_time_limit(0); // the rest of the file can run forever
}
// ....
sleep(900);
// ....
doStuff(); // only has 10 secs to run
// ....
sleep(900);
// ....
Run Code Online (Sandbox Code Playgroud)
set_time_limit() ... 在确定脚本运行的最长时间时,不包括在执行脚本之外发生的活动所花费的任何时间,例如使用system()的系统调用,流操作,数据库查询等.在测量时间真实的Windows上,情况并非如此.
如果希望function1在时间限制结束时返回,则需要自己编写代码.
function doStuff($seconds)
{
$finish=time()+$seconds;
$done=false;
$timeout=false;
while (!$done && !$timeout)
{
//do stuff here, set $done to true if you complete
//out of time?
$timeout=time() >= $finish;
}
return $done; //let caller know if we completed
}
Run Code Online (Sandbox Code Playgroud)
当然,你所做的"东西"需要迭代,以便你可以继续检查你的经过时间,并在必要时退出.
如果您想要任意函数的超时执行并且返回控制权,则不支持.如果您确实需要这样做,请将其设计为单独的流程.然后,如果看起来花费太长时间,您可以关闭该过程.
小智 6
$endtime=time()+10;
while(time()!=$endtime){
echo ".";
}
Run Code Online (Sandbox Code Playgroud)