I have a script which runs in a 'while' cycle. I need to determine for how long the sc开发者_StackOverflowript was running for and if it is over 10 seconds terminate it. The code I wrote returns weird decimal values (one second it might be '5.342...' and other it might be '903.322...'). Can someone tell me how can I achieve that?
$timer = microtime(false);
while(/*...*/)
{
$currTime = microtime(false);
$timeDiff = $currTime - $timer;
$timeDiff *= 1000;
if ($timeDiff > 10)
{
//...
}
}
You're tracking microseconds. If you want to see only the seconds, round it
up using round()
or ceil()
.
You might also consider set_time_limit()
, which controls how long the script is allowed to run for.
set_time_limit(10); // allow ten seconds for this script to finish
You can use register_shutdown_function()
to handle any cleanup that is necessary if the script didn't finish in time.
$timeDiff /= 1000;
1000 microseconds is a second, not the other way around
I believe the argument should be true, see http://php.net/manual/en/function.microtime.php
Try:
$timer = microtime(true);
while(true)
{
$currTime = microtime(true);
$timeDiff = $currTime - $timer;
if ($timeDiff > 10)
{
die();
}
}
精彩评论