Как я могу запустить скрипт PHP с таймером?

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

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

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

5 ответов

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

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

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

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

Попробуйте использовать функцию сброса

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

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

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

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

рабочая демо

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

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

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

Другие вопросы по тегам