2015-01-08 4 views
0

У меня есть сценарий, который использовался для работы в PHP5.3 для обработки буферизации для определенного файла журнала, но после того, как сервер был обновлен до PHP5.5, он больше не работает. Выход должен быть html, поэтому я надеялся просто сбросить выходные данные после каждого эха.PHP потоковая/выходная буферизация больше не работает

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

@apache_setenv('no-gzip', 1); 
@ini_set('zlib.output_compression', 0); 
@ini_set('implicit_flush', 1); 
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } 
ob_implicit_flush(1); 

set_time_limit(0); 

echo 'Start ...<br />'; 
for($i = 0 ; $i < 10 ; $i++) 
{ 
    echo $i . '<br />'; 
    flush(); 
    ob_flush(); 
    sleep(1); 
} 
echo 'End<br />'; 

Я подозреваю, что команды @ini_set не наиважнейшие настройки, и я просто надеясь на простой пример, который будет очищать выходные буферы. Большинство примеров онлайн - от 6 лет назад, и никто из них не работал. Я прочитал, что буферизация была переписана на PHP5.4, поэтому я задаюсь вопросом, не виноват ли это и в этом.

+0

Принимаете ли вы внимание, что некоторым браузерам необходимо увидеть как минимум 1024 байта вывода, прежде чем они что-нибудь отправят? Покраснели или нет? – dgig

ответ

0

Я проверил свой сценарий и сделать некоторые фиксирующее/Улучшение

@apache_setenv('no-gzip', 1); 
@ini_set('zlib.output_compression', 0); 

// you can dismiss this configuration, the bellow explanation is from the php.ini itself 
/* Implicit flush tells PHP to tell the output layer to flush itself 
    automatically after every output block. This is equivalent to calling the 
    PHP function flush() after each and every call to print() or echo() and each 
    and every HTML block. 
*/ 
@ini_set('implicit_flush', 1); 
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } 
ob_implicit_flush(1); 

set_time_limit(0); 

echo 'Start ...<br />'; 
for($i = 0 ; $i < 10 ; $i++) 
{ 
    // put the bellow php code if the user browser is Firefox, Internet Explorer or Safari 
    // Google Chrome just works fine with it but it do not need 
    echo str_repeat(" ", 1024); 

    echo $i . '<br />'; 
    flush(); 
    // ob_flush(); you have used flush(), why using ob_flush() there is nothing to flush anymore 
    sleep(1); 
} 
echo 'End<br />'; 

Я не думаю, что обновление PHP версии вызывает проблему, но я не уверен
Надежды, что помогает :)

+0

Хммм. Все еще не работает для меня ни в FireFox, ни в Chrome. Я где-то читал, что @ ini-set может не работать, поэтому, возможно, мне нужно установить их в файл .htaccess. Спасибо за ваш ответ и отличный комментарий. :) – Das123

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

  • Нет связанных вопросов^_^