Буферизация вывода Php

Discussion in 'PHP' started by prescott, 1 Aug 2008.

  1. prescott

    prescott Elder - Старейшина

    Joined:
    28 Jul 2008
    Messages:
    132
    Likes Received:
    43
    Reputations:
    5
    Задача следующая:

    Есть скрипт импорта БД пользователей. Импорт осуществляется из XML каталога, причем несколько минут.

    Не могу сделать так чтобы скрипт вывел в браузер СРАЗУ какой либо текст, например "Идет импорт БД, ждите...", потом спокойно импортировал базу и вывел результат работы.

    Обычно же PHP дожидается конца работы скрипта и лишь потом выводит всю страницу разом.

    Баловался я с ob_end_flush() и т.д., но я уже видимо переработал, а доделать сегодня надо :mad:

    Есть у кого рабочий пример? Вариант с аяксом и фреймами просьба не предлагать, результата нужно добится одним скриптом.
     
    #1 prescott, 1 Aug 2008
    Last edited: 1 Aug 2008
  2. 5triker

    5triker Elder - Старейшина

    Joined:
    5 Apr 2007
    Messages:
    62
    Likes Received:
    41
    Reputations:
    1
    пхп выполняется на сервере и только потом передается в браузер , сомневаюсь что можно обойтись без аякса и тп. вещей
     
  3. prescott

    prescott Elder - Старейшина

    Joined:
    28 Jul 2008
    Messages:
    132
    Likes Received:
    43
    Reputations:
    5
    Знаю я слава богу что пхп серверный язык) НО видел я пхп скрипт который без джава скрипта выводил построчно данные в браузер, а вот реализации не знаю...
     
    1 person likes this.
  4. razzzar

    razzzar Elder - Старейшина

    Joined:
    16 Jun 2007
    Messages:
    92
    Likes Received:
    75
    Reputations:
    5
    Code:
    echo 'some text';
    flush();
    ob_flush();
    
    эти действия выведут сразу в браузер строку 'some text'
     
    1 person likes this.
  5. slav0nic

    slav0nic Member

    Joined:
    11 Jul 2008
    Messages:
    10
    Likes Received:
    7
    Reputations:
    2
    может лучше использовать кеш в данном случае? на дёргать каждый раз базу попусту, особенно если данные не именились с момента последнего запроса...
     
  6. c411k

    c411k Members of Antichat

    Joined:
    16 Jul 2005
    Messages:
    550
    Likes Received:
    675
    Reputations:
    704
    PHP:
    <?php

    @ini_set('output_buffering',0);
    @
    set_time_limit(0);
    @
    ob_implicit_flush(1);

    function 
    myflush($timee)
    {
        if(
    ob_get_contents())
        {
            
    ob_flush();
            
    ob_clean();
            
    flush();
            
    usleep($timee);
        }
    }

    for(
    $n 0; ++$n <= 1111111;)
    {
        echo 
    $n.'<br>';
        
    myflush(1);
    }
     
    _________________________
    1 person likes this.
  7. bombeg

    bombeg Member

    Joined:
    27 Oct 2008
    Messages:
    136
    Likes Received:
    83
    Reputations:
    8
    проще сделать ява скриптом... добавить в кнопку

    HTML:
    onclick="document.getElementById('progress').style.display = '';"
    
    <div id="progress" style="display: none;">Идет добавление</div>
     
  8. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Есле те надо лишь безсмысленный вывод слова,просто,то можно сделать вопше так

    <?php
    echo "Идет импорт баз,подождите!";
    ?>
    <?php
    твой код скрипта....
    ?>

    тогда сервер обрабатывает ето как два роздельных скрипта,и тот что первый,выполнится,выведется результат,тогда второй будет выполнятся....Есчё есть схожая ф-цыя,

    ob_implicit_flush(0);

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

    <?php
    ob_implicit_flush(0);
    echo "Импор идет...";

    твой код

    ?>

    Так в начале загрузки выведется текст,скрипт будет выподнятся более как по очереди,с начала ето выводится,потому что тут обрабаотывать ненадо,потом будет обрабатяватся дальше и выводится....
     
    #8 Mixon, 15 Jan 2009
    Last edited: 15 Jan 2009
    4 people like this.