Временный цикл в php

Я просто хочу напечатать счет от 1 до 10 с интервалом 10 секунд между каждым целым числом.

eg.

$i=10; //Time delay    
for($j=1;$j<11;$j++)  
{  
    echo $j;  
    //do something to delay the execution by $i seconds  
}

Я пробовал все including flush(), ob_flush(), ob_implicit_flush(), но все, что я получаю, это зависший экран, пока все время не будет выполнено.


person mastero    schedule 22.05.2012    source источник
comment
Почему бы просто не сделать это с помощью javascript/jQuery?   -  person Andrius Naruševičius    schedule 22.05.2012
comment
не могли бы вы предоставить javascript для того же, интегрированного в php ??   -  person mastero    schedule 22.05.2012


Ответы (5)


http://php.net/manual/en/function.sleep.php

Функция сна прервет выполнение вашего скрипта.

Но рассматривали ли вы возможность использования Javascript для чего-то подобного? Ваш скрипт может достичь максимального времени выполнения и будет потреблять ресурсы на сервере. Вместо этого используйте ресурсы клиента!

person Tim    schedule 22.05.2012
comment
спасибо за ответ, но можете ли вы привести пример javascript для этой функциональности в php.??? - person mastero; 22.05.2012
comment
setTimeout() - это то, на что вы хотите обратить внимание, а также какой-то способ обновления DOM: например. getElementById('myid').innerHTML('foo') - person Tim; 22.05.2012

То, что вы хотите, гораздо больше связано с javascript, чем с PHP. Поскольку PHP является серверным, он не предназначен для выполнения таких операций. Вы могли бы заставить его работать, но это было бы не очень красиво.

По моей логике; подсчет от 1 до 10 вообще не должен задействовать сервер. Вы можете сделать это прямо в браузере, поэтому используйте javascript.

person OptimusCrime    schedule 22.05.2012

вы хотите распечатать обратный отсчет во время работы вашего php-скрипта? если да, то попробуйте этот нерекомендуемый фрагмент:

ob_start();
for($i=0;$i<10;$i++) {
   echo str_repeat(" ",10000);
   echo 'printing...<br />';
   ob_flush();
   flush();
   sleep(1);
}

видите, странная строчка:

echo str_repeat(" ",10000);

кажется, что браузерам нужны некоторые «данные», прежде чем они решат действительно сбросить ваши данные. Используйте javascript для счетчиков в реальном времени.

person Community    schedule 22.05.2012
comment
для меня это загадка, но кажется, что некоторым браузерам необходимо отображать определенный объем данных (неизвестно), чтобы иметь возможность эмулировать запись в передний буфер (шутка). Проверьте также здесь. - person ; 25.05.2012

Используйте jQuery. В $(document).ready добавьте задержку в 10 секунд, чтобы показать определенный div, который будет содержать информацию, которая появится через 10 секунд.

Для готовых - http://api.jquery.com/ready/

Для задержки - http://api.jquery.com/delay/

person Andrius Naruševičius    schedule 22.05.2012

Да, используйте Javascript, так как невозможно выполнить эту задачу с помощью PHP с использованием HTTP из-за буферизации вывода.

person Roman Newaza    schedule 22.05.2012