Как я могу запустить скрипт PHP с таймером? - PullRequest
3 голосов
/ 27 июля 2011

У меня есть функции foreach, которые печатают имена учеников

$names = array("Alex","Brad","Tom");
foreach($names as $name) {
   echo "$name <br />";
   sleep(3);
}

Как мне печатать каждое имя каждые 3 секунды?После "echo $name" мне нужен таймер, чтобы остановить цикл и подождать 3 секунды.sleep() функции здесь не работают.Что еще я могу сделать?

Ответы [ 5 ]

4 голосов
/ 27 июля 2011

Вы не можете сделать это на стороне сервера (надежно). Это потому, что слишком большая вероятность того, что ваш трафик будет задерживаться или буферизироваться в пути: веб-сервером, прокси-серверами в пути, вашим браузером и т. Д. Однако это, вероятно, будет работать на CLI.

Так что я бы определенно сделал это на стороне клиента, не жертвуя безопасностью (при необходимости).

Если это только для «косметических» целей, вы можете создать метод AJAX, который будет возвращать массив имен, а затем Javascript выводит их со своими таймерами.

Или, вы можете сделать так, чтобы AJAX вызывал скрипт PHP, используя таймеры, и PHP будет возвращать только одно имя. Он может сохранить текущую метку времени в БД или в переменной Session и не возвращать новое имя, пока не пройдет какое-то время.

3 голосов
/ 27 июля 2011

попробуйте использовать flush function

ob_start();    
$names = array("Alex","Brad","Tom");
foreach($names as $name) {
   echo "$name <br />";
   ob_flush();
   flush();    
   sleep(10);
}
1 голос
/ 27 июля 2011

Если вам нужно сделать это на веб-странице, вам нужно очистить вывод или отключить буферизацию вывода, чтобы получить эту работу. Некоторые ссылки:

В php CLI этот код будет работать.

1 голос
/ 27 июля 2011

Вы можете сделать это с помощью JavaScript, AJAX

или с функцией flush ()

<?php
$names = array("Alex","Brad","Tom");
foreach($names as $name) {
   echo "$name <br />";
   flush();
   sleep(3);
}

рабочая демонстрация

0 голосов
/ 27 июля 2011

Вы можете написать flush(); после echo

...