2016-01-07 3 views
0

У меня есть сценарий и вы пытаетесь отправить данные в chunked. Для этого я отключил output_buffering в php.iniНе удается отправить данные, размещенные в браузере

output_buffering=off 

теперь, когда я бегу мой сценарий:

echo "stream1"; 
sleep(5); 
echo "stream2"; 

Он отображать весь вывод после полного выполнения сценария, вместо отправки stream1 первого, а затем stream2 через 5 секунд ожидания браузера.

+1

Я являюсь словцо разработчик PHP, но это имеет смысл. Это встроенный скрипт, он работает на сервере и работает так, что скрипт выполняется, и результаты отправляются клиенту. Если вы хотите отправлять свои данные «один за другим», вам нужен ваш клиент для отправки запроса на сервер, и ваш скрипт должен отправить новую часть данных в ответ на ваш запрос. – john

+1

1. вам нужно 'flush()' фактически отправить вывод и 2. у вас нет гарантии, что браузер действительно решит немедленно показать все полученные. – arkascha

+0

, как вы сказали, я попробовал эхо «stream1»; промывать(); но он все еще показывает stream1stream2 вместе. – Curious

ответ

0

Попробуйте, как показано ниже:

<?PHP 
ob_start(); 

echo 'Output one.'; 
ob_flush(); 
sleep(5); 
echo 'Output two.'; 
ob_flush(); 
?> 

Я думаю, что это скорее вопрос запрос HTTP/ответ. В командной строке скрипт работает нормально.

Обычно ответ готов полностью и отправляется клиенту. Если ваш ответ имеет такой размер, который нужно отправить нескольким пакетам tcp, может случиться так, что первые пакеты будут отправлены, прежде чем скрипт будет готов с обработкой. Таким образом, это зависит от размера вывода. В зависимости от клиента/веб-браузера также может случиться так, что первые пакеты будут отображаться до того, как на клиент поступит полный ответ.

Попробуйте ниже сценарий:

header('Content-type: text/html; charset=utf-8'); 
header("Cache-Control: no-cache, must-revalidate"); 
header ("Pragma: no-cache"); 
set_time_limit(0); 
ob_implicit_flush(1); 
for ($i = 0; $i < 10; $i++) { 
    $randSlp=rand(1,3); 
    echo "Sleeping for ".$randSlp." second. ";; 
    sleep(1); 
    if(ob_get_level()>0) 
     ob_end_flush(); 
} 
+0

, но сначала, пожалуйста, скажите мне, должен ли я включить output_buffering в php.ini перед тем, как попробовать ваш скрипт. – Curious

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