Я хочу, чтобы PHP произвел некоторый текст, затем спал в течение с половиной секунды, и затем произвел еще некоторый текст.
<?php
echo 'Output one.';
usleep(1500000);
echo 'Output two.';
?>
Моя проблема состоит в том, что весь текст выпускается одновременно - ожидая те 1,5 секунды. Я считал что-то о функции, вызванной сброс - но это, кажется, не работает. Возможно, я не использую его запись. Любая справка ценилась бы ^^
Заранее спасибо!
проверить
<?php
ob_start();
echo 'Output one.';
ob_flush();
usleep(1500000);
echo 'Output two.';
ob_flush();
?>
Хотя решение Pentium10, вероятно, будет работать, вы можете рассмотреть возможность переноса его на клиентскую сторону. Выполните асинхронный вызов для получения первого значения, распечатайте его, спите необходимое количество времени и затем повторите для второго значения.
Ответ Pentium10 не совсем сработал для меня .. Однако, когда я перешел на страницу документации PHP, там было много хороших комментариев.
http://php.net/manual/en/function.ob-flush.php
У меня это сработало, используя Firefox 3.5.9, PHP 5.2.11, Apache, работающий на локальном ноутбуке с Windows 7:
echo "test";
ob_end_flush();
flush();
usleep(x);
echo "test";
Ob_end_flush () имел решающее значение для получения данных.
Я думаю, что это скорее проблема http-запросов/ответов. В командной строке ваш скрипт работает нормально.
Обычно ответ подготавливается полностью и отправляется клиенту. Если ваш ответ имеет такой размер, что необходимо отправить несколько tcp-пакетов, может случиться так, что первые пакеты будут отправлены, прежде чем ваш скрипт будет готов к обработке. Так что все зависит от размера вывода. В зависимости от клиента/браузера, может случиться так, что первые пакеты будут отображены до того, как полный ответ придет на клиент.
Как ответил Noufal Ibrahim, пока я печатал, я полностью с ним согласен. Делайте это асинхронно.