За последние 24 часа нас посетили 22350 программистов и 1145 роботов. Сейчас ищут 643 программиста ...

Не работает ob_start .. ob_flush();

Тема в разделе "PHP для профи", создана пользователем Slavka, 10 авг 2019.

  1. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    Всем доброе время суток, и так почему завел в этой ветке
    смотрите
    PHP Version 7.0.33-0+deb9u3
    [php.ini]
    output_buffering=OFF
    output_handler = NULL
    implicit_flush = TRUE

    php.ini нужный - значения в phpinfo меняются.

    в самом скрипте идет класическая работа с курлами

    ну примерно чтото такое ( не рабочее - только для понимания)

    PHP:
    1. $ip_address = array ( 10.163.1.1, 10.163.1.2... много и не рабочие тоже есть - примерно 200 штук)
    2.  
    3.  
    4. foreach ( $ip_address as $value)
    5. {
    6. $url = "http://."$value."/cgi-bin/configure.php?параметры;
    7.  
    8. $response= класическая функция вызова курла ;
    9. echo "<pre>$value : $response </pre>";
    10.  
    11. echo str_pad('',16385)."\n";  
    12. echo '<pre>' , var_dump( ob_get_status (TRUE)), '</pre>';
    13.  
    14.        ob_flush();
    15.    flush();
    16. }
    17. ob_end_flush();

    а теперь смотрите что выводит ob_get_status

    это самый первый ( до цикла)
    PHP:
    1. array(1) {
    2.   [0]=>
    3.   array(7) {
    4.     ["name"]=>
    5.     string(22) "default output handler"
    6.     ["type"]=>
    7.     int(0)
    8.     ["flags"]=>
    9.     int(112)
    10.     ["level"]=>
    11.     int(0)
    12.     ["chunk_size"]=>
    13.     int(0)
    14.     ["buffer_size"]=>
    15.     int(16384)
    16.     ["buffer_used"]=>
    17.     int(6)
    18.   }
    19. }
    это после первого прохода цикла
    PHP:
    1. array(2) {
    2.   [0]=>
    3.   array(7) {
    4.     ["name"]=>
    5.     string(22) "default output handler"
    6.     ["type"]=>
    7.     int(0)
    8.     ["flags"]=>
    9.     int(112)
    10.     ["level"]=>
    11.     int(0)
    12.     ["chunk_size"]=>
    13.     int(0)
    14.     ["buffer_size"]=>
    15.     int(16384)
    16.     ["buffer_used"]=>
    17.     int(289)
    18.   }
    19.   [1]=>
    20.   array(7) {
    21.     ["name"]=>
    22.     string(22) "default output handler"
    23.     ["type"]=>
    24.     int(0)
    25.     ["flags"]=>
    26.     int(112)
    27.     ["level"]=>
    28.     int(1)
    29.     ["chunk_size"]=>
    30.     int(0)
    31.     ["buffer_size"]=>
    32.     int(32768)
    33.     ["buffer_used"]=>
    34.     int(17435)
    35.   }
    36. }
    а это уже 3 ..
    PHP:
    1. array(2) {
    2.   [0]=>
    3.   array(7) {
    4.     ["name"]=>
    5.     string(22) "default output handler"
    6.     ["type"]=>
    7.     int(0)
    8.     ["flags"]=>
    9.     int(112)
    10.     ["level"]=>
    11.     int(0)
    12.     ["chunk_size"]=>
    13.     int(0)
    14.     ["buffer_size"]=>
    15.     int(49152)
    16.     ["buffer_used"]=>
    17.     int(35281)
    18.   }
    19.   [1]=>
    20.   array(7) {
    21.     ["name"]=>
    22.     string(22) "default output handler"
    23.     ["type"]=>
    24.     int(0)
    25.     ["flags"]=>
    26.     int(20592)
    27.     ["level"]=>
    28.     int(1)
    29.     ["chunk_size"]=>
    30.     int(0)
    31.     ["buffer_size"]=>
    32.     int(32768)
    33.     ["buffer_used"]=>
    34.     int(16447)
    35.   }
    36. }


    Почему buffer_size то растет , вместо того чтобы выкидывать , да и вообще почему он есть.

    и в итоге текстовка показывается только в конце - сейчас пока тесты на 10 ип , но на 200 ... это он подвиснет на долго

    пробовал ставить
    output_buffering=1 ( сразу в phpinfo единица и засветилась.)
    когда стоит значение off -
    в phpinfo
    output_buffering no value


    Огромное спасибо за любые советы.
    --- Добавлено ---
    единственное что я не могу сделать - это перезагрузить сервер , ну никак
     
  2. DarkU

    DarkU Активный пользователь

    С нами с:
    15 июл 2013
    Сообщения:
    12
    Симпатии:
    2
    Если вы правили (а вы правили) php.ini - значит что-то "непеправили".
    Использование функции буферизации при это говорить интерпретатору что бы он НЕ использовал буфер?
    Будеризация вивода, это не что иное как сохранять или не сохранять что то в память и потом или сразу или через какое условия усвобождать память путем вывода.
     
  3. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    Все что я правил - так это эти несколько строк - больше вообще ничего не трогал. Даже часовой пояс не выставлял =) потому- что остальное меня и так устраивает.
     
  4. DarkU

    DarkU Активный пользователь

    С нами с:
    15 июл 2013
    Сообщения:
    12
    Симпатии:
    2
    Зачем вам в этом ситуации использование функции ob_start() - ob_end_flush()?
    Если это CURL, тогда вы можете запретить ему выводиться результат, в оставлять это в переменной.После окончания, делайте с переменной что вам нужно без использование ob_start().