Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод информации сервером к браузеру, но скрипт еще не выполнен до конца....
 
 автор: Sergic   (15.09.2008 в 22:23)   письмо автору
 
 

Помогите разобраться... с буфером или чем-там ешо... короч не знаю или такое возможно....
Есть допустим скрипт, который обрабатывает данные, но их очень много и скрипт долго работает и бравзер мне ничего не выводит в это время... тобиш жду в облаках пока скрипт обработает всё...
И вот мне нужно вывести хотя б какието данные, или просто страничку с инфой мол паждите пару сек, щя всё загрузиться, или создать страницу, которая перезагрузиться на другую, а данные будут обрабатываться до того момента как страница перезагрузиться... как и что делать вообше даже не знаю... одно токо xajax использовать мне не желательно, если конечно это не единственный способ (
Спасибо, жду помощи!

  Ответить  
 
 автор: koshka   (15.09.2008 в 22:48)   письмо автору
 
   для: Sergic   (15.09.2008 в 22:23)
 

Попробуйте вызвать flush() после операций вывода. Если настройки среды это разрешают, такой вызов приведет к принудительному сбросу буфера.

  Ответить  
 
 автор: Sergic   (16.09.2008 в 02:55)   письмо автору
 
   для: 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 сразу, до того как начнутся обрабатываться данные, но я не знаю как это вывести так как апач выдает браузеру данные после полной обработки скрипта, а это долго и ждать нет времени... вот теперь что делать? какие функции использовать и вообше возможно ли такое? (это похоже на систему чатов, у них типо вечная загрузка но как оно всё делается без понятия)

  Ответить  
 
 автор: koshka   (16.09.2008 в 02:59)   письмо автору
 
   для: 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"; 

?>  

  Ответить  
 
 автор: Sergic   (16.09.2008 в 17:58)   письмо автору
 
   для: koshka   (16.09.2008 в 02:59)
 

вроде бы работает, но вот только проблема...
когда идёт запуск flush() буфер не сразу выводиться, а выводиться лишь если после него есть отправка в echo большой объем данных...

тобиш

...
flush();
print_r($data); echo "<br>"; //тут выводит большой объем данных

вот тогда выводит и $str и часть этого print_r... но если нет вывода данных после flush() то приходиться ждать завершения в работы скрипта... в чем это проблемы, может дето есть лимит вывода буфера, точнее минимум который должен вывести flush()???

  Ответить  
 
 автор: xx77   (16.09.2008 в 18:17)   письмо автору
 
   для: Sergic   (16.09.2008 в 17:58)
 

есть особенность браузеров показывать части не полностью сформированной страницы только после появления например тега <br/> или <hr/> или тому подобного
типа сначала думают как показать .
если есть возможность , попробуйте добавить echo'<hr/>'; перед flush();

  Ответить  
 
 автор: Sergic   (16.09.2008 в 19:36)   письмо автору
 
   для: xx77   (16.09.2008 в 18:17)
 

и перед, и после добавил серавно скрипт работает сек 7 и после того я получаю тело хтмл

  Ответить  
 
 автор: Trianon   (16.09.2008 в 19:40)   письмо автору
 
   для: Sergic   (16.09.2008 в 17:58)
 

Должен быть выключен output buffering
И полезно перед flush выкинуть символы завершения строки (CR LF)
впрочем, на некоторых серверах может не помочь и это.

  Ответить  
 
 автор: Sergic   (16.09.2008 в 19:56)   письмо автору
 
   для: Trianon   (16.09.2008 в 19:40)
 

Ура))) output_buffering = Off
спасибо!!! помогло!!! наконец заработало...
а теперь как на хостинге отключить эту функцию? доступа к php.ini не имею (PHP 5 стоит)

  Ответить  
 
 автор: Trianon   (16.09.2008 в 20:07)   письмо автору
 
   для: Sergic   (16.09.2008 в 19:56)
 

http://ru.php.net/manual/ru/function.ob-end-flush.php

[поправлено модератором]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования