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
  • 15,859
  • 29
  • 111
  • 181

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
  • 265,109
  • 74
  • 539
  • 565
1
$timeDiff /= 1000;

1000 microseconds is a second, not the other way around

BlueRaja - Danny Pflughoeft
  • 84,206
  • 33
  • 197
  • 283
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
  • 16,890
  • 6
  • 50
  • 68