7

I have a script that uses while(true) to run so it runs forever until it dies. I want to be able to make it echo something once every 4 minutes, how can i do this? The script runs on command prompt and it uses while(true) so its confusing plus i am not sure how to make it do that every 4 minutes. How can i make it echo something once every 4 minutes while still in a while(true)?

Peter O.
  • 32,158
  • 14
  • 82
  • 96
Matt Jenkins
  • 81
  • 1
  • 1
  • 2

3 Answers3

7

You can try

while(true)
{
    sleep(240); // sleep for 240 sec
    echo " Hello World" ;
}

Or

$time = time();
while ( true ) {
    /*
     * Play Some Ball
     */

    if ((time() - $time) >= 240) {
        echo date("Y:m:d g:i:s"), PHP_EOL;
        $time = time();
    }
    sleep(2);
}

Output Test with Time = 2 sec, Sleep = 1 sec

2012:10:14 12:50:56
2012:10:14 12:50:58
2012:10:14 12:51:00
2012:10:14 12:51:02
2012:10:14 12:51:04
2012:10:14 12:51:06
2012:10:14 12:51:08
2012:10:14 12:51:10
2012:10:14 12:51:12
2012:10:14 12:51:14
Baba
  • 94,024
  • 28
  • 166
  • 217
4

Using a sleep method will actually halt your script from running. I'm not 100% if this is what you want to happen.

Another way to attack this issue would be to compare timestamps from the last "echo" command on each iteration.

$echo_time = time();
$interval = 4*60;
while(true){
  if ($echo_time + $interval >= time()){
    echo "$interval seconds have passed...";
    $echo_time = time(); // set up timestamp for next interval
  }
  // other uninterrupted code goes here.
}

This will allow your code within your loop to continue running and only check the times at the start of each iteration.

Lix
  • 47,311
  • 12
  • 103
  • 131
  • In php7 `echo "$interval seconds have passed..."; ` should be: `echo $interval . "seconds have passed...";` Or: `echo $interval . 'seconds have passed...'; // single quot is faster than double quot` – jagb Mar 04 '17 at 18:10
1

Try adding in a loop of while(true) { ... } sleep() parameter function.

$sleep = 4*60;
while(true)
{
    # waiting...        
    sleep($sleep);
    # work after 240 mins
}
Marin Sagovac
  • 3,932
  • 5
  • 23
  • 53