PDA

Просмотр полной версии : Буферизация вывода Php


prescott
01.08.2008, 18:32
Задача следующая:

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

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

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

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

Есть у кого рабочий пример? Вариант с аяксом и фреймами просьба не предлагать, результата нужно добится одним скриптом.

5triker
01.08.2008, 19:03
пхп выполняется на сервере и только потом передается в браузер , сомневаюсь что можно обойтись без аякса и тп. вещей

prescott
01.08.2008, 20:04
Знаю я слава богу что пхп серверный язык) НО видел я пхп скрипт который без джава скрипта выводил построчно данные в браузер, а вот реализации не знаю...

razzzar
01.08.2008, 20:55
echo 'some text';
flush();
ob_flush();

эти действия выведут сразу в браузер строку 'some text'

slav0nic
02.08.2008, 00:14
может лучше использовать кеш в данном случае? на дёргать каждый раз базу попусту, особенно если данные не именились с момента последнего запроса...

c411k
15.01.2009, 11:06
<?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);
}

bombeg
15.01.2009, 11:19
проще сделать ява скриптом... добавить в кнопку

onclick="document.getElementById('progress').style.display = '';"

<div id="progress" style="display: none;">Идет добавление</div>

Mixon
15.01.2009, 15:51
Есле те надо лишь безсмысленный вывод слова,просто,то можно сделать вопше так

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

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

ob_implicit_flush(0);

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

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

твой код

?>

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