2016-03-21 5 views
1

Пожалуйста, извините, что может показаться очень простым вопросом, и может отсутствие понимания того, как работает PHP/спящий режим(), но я был после некоторого руководства по следующему коду:Как сон() работает в PHP

<?php 
$time_now = time(); 
echo "Time Now : " . $time_now; 
sleep(10); 
$time_then = time(); 
echo "<br>Time Then : " . $time_then; 
?> 

Я ожидал, что этот код выведет текущее время, а затем подождите 10 секунд, затем выведите время через 10 секунд.

Вместо этого он ждет 10 секунд и одновременно выводит оба раза. Времена правильны в том, что «Время сейчас» - это когда я выполнил код, а «Время» - через 10 секунд, но он не отвечает, как я ожидал (выведите «Время сейчас», подождите 10 секунд, а затем продолжайте выполнение код и показать «Время тогда»).

Учитывая, что мое понимание явно неверно, можно ли это достичь? Или я был бы лучше, чтобы вызвать другой файл, чтобы загрузить то, что я хочу сделать следующее:

Файл 1

<?php 
$time_now = time(); 
echo "Time Now : " . $time_now; 
header('Location: page2.php'); 
?> 

Файл 2

<?php 
sleep(10); 
$time_then = time(); 
echo "<br>Time Then : " . $time_then; 
?> 

Спасибо.

+0

В 'сон() 'command, используется для того, чтобы сообщить серверу подождать, прежде чем выполнять ваш скрипт. Кажется, неважно, поставите ли вы функцию в начале, середине или в конце, она все равно спит. – Jer

+0

@ C0dekid Спасибо, я это понимаю, но я ожидал, что код перед командой sleep выполнит и эхо до этого ждет и повторит второе значение. – omega1

+0

Вывод буферизуется в целом. Если вы хотите немедленный ответ при вызове 'echo', вам нужно очистить свой вывод. – Phylogenesis

ответ

4

Чтобы получить исключенный результат, вам нужно использовать функцию PHP flush.

PHP дает вам выход, когда скрипт завершен. Если вы хотите показать результат в реальном времени, вам нужно очистить выходной буфер.

$time_now = time(); 
echo "Time Now : " . $time_now; 
flush(); 
sleep(10); 
$time_then = time(); 
echo "<br>Time Then : " . $time_then; 
+0

Спасибо, но это дает мне тот же результат – omega1

+0

Прочитайте комментарии на http://php.net/manual/en/function.flush.php - сервер и браузер могут также выводить буфер. Попробуйте отправить больше текста (пробелы и хотя бы одну новую строку) и проверьте конфигурацию веб-сервера. – NineBerry

+1

Проверьте это: http://stackoverflow.com/questions/4706525/php-flush-not-working – vaso123

1

Если вы запустите его на сервере, он действительно выдаст результат после завершения скрипта.

Но если он используется в качестве строки сценария командной он будет выводить потом спать в течение десяти секунд, а затем продолжить

В @lolka_bolka упомянуто, если вы хотите значение, то и там вы можете использовать флеш

Смежные вопросы