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)
?
Asked
Active
Viewed 2.6k times
7

Peter O.
- 32,158
- 14
- 82
- 96

Matt Jenkins
- 81
- 1
- 1
- 2
-
maybe sleep or delay function – rsz Oct 13 '12 at 22:45
-
1Are you trying to spawn a server process to do some work from PHP or is this a local script that you are executing? – jheddings Oct 13 '12 at 22:51
3 Answers
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
-
2
-
2I would always recommend a small sleep on a tight loop that will run forever. That or some other yielding method to avoid an all-consuming loop. – jheddings Oct 13 '12 at 22:55
-
-
-
1yup small sleep to give job scheduler a change using something like usleep. – Alfred Oct 13 '12 at 23:13
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