2014-01-16 2 views
0

Удивите, есть ли способ, которым PHP-скрипт возвращает и печатает сразу в браузере (через веб-страницу) результат различных функций, не дожидаясь завершения следующего.PHP get function return instantly

Пример кода PHP:

<? php 
for ($i = 0; $i < 100; $i++) { 
    echo $i. ":". my_function();// takes a long time to run 
} 
?> 

релиз:

0: value ... (the function of the cycle $i = 1 is still running) 
1: value ... (the function of the cycle $i = 2 is still running) 

и так далее ...

+0

No. PHP должен все просчитать, прежде чем он может оказать HTML. Theres никак не может создать что-то подобное в PHP динамически. –

+1

@YUNOWORK Не правда. PHP не должен ничего ждать, он просто выводит значения по мере их появления. * Веб-сервер * обычно является буферизацией ответа. – deceze

+0

OP: HTTP является _synchronous_, и любой вывод будет отправлен клиенту только после выполнения сценария. Это не похоже на CLI-режим вообще –

ответ

1

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

описание от php.net:

промывает буферы записи из PHP и все, что базовая РНР использует (CGI, веб-сервер, и т.д.). Это пытается вытолкнуть текущий вывод всего в браузер с несколькими оговорками.

Возможно, flush() не сможет переопределить схему буферизации вашего сервера и не оказывает никакого влияния на любую клиентскую буферизацию в браузере . Он также не влияет на выходную буферизацию пользовательского пространства PHP . Это означает, что вам нужно будет вызвать оба ob_flush() и flush(), чтобы очистить выходные выходные буферы, если вы их используете.

пример код, протестирован на хромированные 31.0.1650.57 (Linux), Safari (6.0.4) (OSX):

примечания: следует ли показывать раскрасневшийся выход до браузера (обычно в зависимости от количества данных в ответе). например, Safari (6.0.4) хочет 512 байт данных перед выводом данных в браузер. Вы можете обойти это, сделав что-то вроде заполнения от 512 символов до начала вывода.

<?php 
header('Content-type: text/html; charset=utf-8'); 
echo str_repeat(" ",512); //pad the buffer with data (in case browser needs it) 
while (true){ 
    //write go to the browser every 2 seconds.. forever 
    echo "go...<br/>"; 
    ob_flush(); 
    flush(); 
    sleep(2); 
} 
?> 

подробнее здесь http://us1.php.net/manual/en/function.flush.php

+1

Буду признателен, если бы вы предложили конструктивную причину, почему это было приостановлено. – KorreyD