Question

I have a script which runs in a 'while' cycle. I need to determine for how long the script 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)
   {
      //...
   }
}
Was it helpful?

Solution

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.

OTHER TIPS

$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();
   }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top