Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как ускорить выдачу echo ?
 
 автор: Владимир55   (12.05.2013 в 21:48)   письмо автору
 
 

В середине относительно длиного кода имеется команда выдачи информации внешнему пользователю (системе 1С)
 echo "success\n"; 

Эту команду необходимо исполнить незамедлительно, и только потом продолжать исполнение РНР кода, который отрабатывает довольно долго.

Но получается так, что ответ в 1С выдается лишь тогда, когда полностью отработал РНР код. И это нехорошо.

Можно ли исправить ситуацию?

(В обмене с 1С браузер не участвует).

  Ответить  
 
 автор: cheops   (12.05.2013 в 21:57)   письмо автору
 
   для: Владимир55   (12.05.2013 в 21:48)
 

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

  Ответить  
 
 автор: Владимир55   (13.05.2013 в 12:40)   письмо автору
 
   для: cheops   (12.05.2013 в 21:57)
 

Вот такой код на сервере выполняется 15 секунд:
for ($i=0; $i <= 50000000; $i++) $x = round (1, 1000);


И с его помощью пытаюсь проверить эффективность flush ();

echo "success\n";
 flush ();

for ($i=0; $i <= 50000000; $i++) $x = round (1, 1000);


Пятнадцати секунд достаточно, чтобы оценить, когда система 1С получила отклик. И получается, что flush ничего не дает - ожидание все те же 15 секунд, как если бы flush не было...
Не помогает и ob_flush.

Больше вариантов нет?

  Ответить  
 
 автор: Владимир55   (13.05.2013 в 18:55)   письмо автору
 
   для: Владимир55   (13.05.2013 в 12:40)
 

Может быть, нужно сделать output_buffering = Off ? Это поможет?

Сейчас output_buffering 4096.

(Если я правильно понимаю, то эта настройка распространяется на РНР вцелом, а не на конкретный скрипт. И вся система будет тормозить !?)

  Ответить  
 
 автор: cheops   (13.05.2013 в 20:59)   письмо автору
 
   для: Владимир55   (13.05.2013 в 18:55)
 

>Может быть, нужно сделать output_buffering = Off ? Это поможет?
Поможет.

>(Если я правильно понимаю, то эта настройка распространяется на РНР вцелом, а не на конкретный скрипт. И вся система
>будет тормозить !?)
Совершенно верно, но вы можете изменить эту директиву на уровне виртуального хоста или даже отдельной папки при помощи .htaccess (если, конечно, у вас не nginx).

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования