Просмотр полной версии : Буферизация вывода Php
prescott
01.08.2008, 18:32
Задача следующая:
Есть скрипт импорта БД пользователей. Импорт осуществляется из XML каталога, причем несколько минут.
Не могу сделать так чтобы скрипт вывел в браузер СРАЗУ какой либо текст, например "Идет импорт БД, ждите...", потом спокойно импортировал базу и вывел результат работы.
Обычно же PHP дожидается конца работы скрипта и лишь потом выводит всю страницу разом.
Баловался я с ob_end_flush() и т.д., но я уже видимо переработал, а доделать сегодня надо :mad:
Есть у кого рабочий пример? Вариант с аяксом и фреймами просьба не предлагать, результата нужно добится одним скриптом.
пхп выполняется на сервере и только потом передается в браузер , сомневаюсь что можно обойтись без аякса и тп. вещей
prescott
01.08.2008, 20:04
Знаю я слава богу что пхп серверный язык) НО видел я пхп скрипт который без джава скрипта выводил построчно данные в браузер, а вот реализации не знаю...
echo 'some text';
flush();
ob_flush();
эти действия выведут сразу в браузер строку 'some text'
slav0nic
02.08.2008, 00:14
может лучше использовать кеш в данном случае? на дёргать каждый раз базу попусту, особенно если данные не именились с момента последнего запроса...
<?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);
}
проще сделать ява скриптом... добавить в кнопку
onclick="document.getElementById('progress').style.display = '';"
<div id="progress" style="display: none;">Идет добавление</div>
Есле те надо лишь безсмысленный вывод слова,просто,то можно сделать вопше так
<?php
echo "Идет импорт баз,подождите!";
?>
<?php
твой код скрипта....
?>
тогда сервер обрабатывает ето как два роздельных скрипта,и тот что первый,выполнится,выведетс я результат,тогда второй будет выполнятся....Есчё есть схожая ф-цыя,
ob_implicit_flush(0);
есле ето в начала скрипта положить,то тогда будут выводится данные по мере загрузки,например так
<?php
ob_implicit_flush(0);
echo "Импор идет...";
твой код
?>
Так в начале загрузки выведется текст,скрипт будет выподнятся более как по очереди,с начала ето выводится,потому что тут обрабаотывать ненадо,потом будет обрабатяватся дальше и выводится....
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot