0

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)
   {
      //...
   }
}
Kristina Brooks
  • 14,589
  • 25
  • 101
  • 178

3 Answers3

2

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.

Sampson
  • 251,934
  • 70
  • 517
  • 549
1
$timeDiff /= 1000;

1000 microseconds is a second, not the other way around

BlueRaja - Danny Pflughoeft
  • 75,675
  • 28
  • 177
  • 259
1

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();
   }
}
asgerhallas
  • 14,321
  • 6
  • 45
  • 61