|
|
|
| Помогите разобраться... с буфером или чем-там ешо... короч не знаю или такое возможно....
Есть допустим скрипт, который обрабатывает данные, но их очень много и скрипт долго работает и бравзер мне ничего не выводит в это время... тобиш жду в облаках пока скрипт обработает всё...
И вот мне нужно вывести хотя б какието данные, или просто страничку с инфой мол паждите пару сек, щя всё загрузиться, или создать страницу, которая перезагрузиться на другую, а данные будут обрабатываться до того момента как страница перезагрузиться... как и что делать вообше даже не знаю... одно токо xajax использовать мне не желательно, если конечно это не единственный способ (
Спасибо, жду помощи! | |
|
|
|
|
|
|
|
для: Sergic
(15.09.2008 в 22:23)
| | Попробуйте вызвать flush() после операций вывода. Если настройки среды это разрешают, такой вызов приведет к принудительному сбросу буфера. | |
|
|
|
|
|
|
|
для: koshka
(15.09.2008 в 22:48)
| | вобшем ситуация такова, допустим примерный скрипт..., просто тот скрипт где я должен всю штуку замутить очень громоздкой и куда его то flush() втулять даж приблизительно не знаю...
<?php
$str = <<<END
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Refresh" content="2; URL=admin.php?blabla=1" />
<title>:: Admin Area ::</title>
</head>
<body>
Пжалуста подождите, данные обрабатываются!
</body>
</html>
END;
echo $str;
// вот этот usleep допустим показывает время обработки данных, длительное время
usleep(5000000);
//echo "1";
?>
|
вот теперь мне надо вывести $str сразу, до того как начнутся обрабатываться данные, но я не знаю как это вывести так как апач выдает браузеру данные после полной обработки скрипта, а это долго и ждать нет времени... вот теперь что делать? какие функции использовать и вообше возможно ли такое? (это похоже на систему чатов, у них типо вечная загрузка но как оно всё делается без понятия) | |
|
|
|
|
|
|
|
для: Sergic
(16.09.2008 в 02:55)
| |
<?php
$str = <<<END
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Refresh" content="2; URL=admin.php?blabla=1" />
<title>:: Admin Area ::</title>
</head>
<body>
Пжалуста подождите, данные обрабатываются!
</body>
</html>
END;
echo $str;
flush(); //Вот сюда.
// вот этот usleep допустим показывает время обработки данных, длительное время
usleep(5000000);
//echo "1";
?>
|
| |
|
|
|
|
|
|
|
для: koshka
(16.09.2008 в 02:59)
| | вроде бы работает, но вот только проблема...
когда идёт запуск flush() буфер не сразу выводиться, а выводиться лишь если после него есть отправка в echo большой объем данных...
тобиш
...
flush();
print_r($data); echo "<br>"; //тут выводит большой объем данных
|
вот тогда выводит и $str и часть этого print_r... но если нет вывода данных после flush() то приходиться ждать завершения в работы скрипта... в чем это проблемы, может дето есть лимит вывода буфера, точнее минимум который должен вывести flush()??? | |
|
|
|
|
|
|
|
для: Sergic
(16.09.2008 в 17:58)
| | есть особенность браузеров показывать части не полностью сформированной страницы только после появления например тега <br/> или <hr/> или тому подобного
типа сначала думают как показать .
если есть возможность , попробуйте добавить echo'<hr/>'; перед flush(); | |
|
|
|
|
|
|
|
для: xx77
(16.09.2008 в 18:17)
| | и перед, и после добавил серавно скрипт работает сек 7 и после того я получаю тело хтмл | |
|
|
|
|
|
|
|
для: Sergic
(16.09.2008 в 17:58)
| | Должен быть выключен output buffering
И полезно перед flush выкинуть символы завершения строки (CR LF)
впрочем, на некоторых серверах может не помочь и это. | |
|
|
|
|
|
|
|
для: Trianon
(16.09.2008 в 19:40)
| | Ура))) output_buffering = Off
спасибо!!! помогло!!! наконец заработало...
а теперь как на хостинге отключить эту функцию? доступа к php.ini не имею (PHP 5 стоит) | |
|
|
|
|