Я хочу сделать следующее: если $ start – кратна 28, скрипт остановится на 20 секунд, а затем продолжит работу.
Для этого я написал:
set_time_limit(0); ini_set('display_errors', 1); error_reporting(E_ALL); date_default_timezone_set("Europe/Moscow"); $start = 0; $end = 2000; for($start = 0; $start < 20; $start++){ if($start % 28 == 0){sleep(20);echo 'sleep ';} echo date('H:i:s').'<br>'; }
Когда я его использую, я получаю:
sleep 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01 14:51:01
Поэтому я вижу, что скрипт работает неправильно …
Не могли бы вы рассказать мне, почему сценарий работает неправильно?
Я вижу этот цикл:
for($start = 0; $start < 20; $start++){ if($start % 28 == 0){sleep(20);echo 'sleep ';} echo date('H:i:s').'<br>';
И последний элемент значения $ start в цикле 20.
Для цикла больше taht 1 нужно использовать значение $ start > 56, becose if($start % 28 == 0)
.
Например – 28*2 //for 2 loop.
Технически, 0 кратно 28, и ваша программа работает в соответствии с этим, поэтому я думаю, что это просто не то, что вы хотите. Есть два способа, которые я могу себе представить, возможно, в коде мы лучше понимаем друг друга:
// 1. Sleep after every 28 times outputting current date: for($i = $start; $i < $end; $i++) { echo date('H:i:s').'<br>'; if($i % 28 == 27) { echo 'sleeping...<br>'; sleep(20); } } // 2. Sleep before every 28th time outputting the current date, except the first time: for($i = $start; $i < $end; $i++) { if($i != 0) && (($i % 28) == 0)) { echo 'sleeping...<br>'; sleep(20); } echo date('H:i:s').'<br>'; }
Если ни одна из них не даст вам правильную идею, вам нужно будет уточнить, что именно вы имеете в виду.