ФорумПрограммированиеPHP для идиотов → Буферизация, мать её..

Буферизация, мать её..

  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 23 августа 2009 г. 10:45


    ob_start();
    for($j=0;$j<100;$j++)
    {
    sleep(1);
    echo $j;
    ob_flush();
    flush();
    }


    Моя цель: выводить циферки от 0 до 99 по-очереди! Проблема собственно в том, что в опере сие чудо не работает (в отличие от мозилы и осла, к примеру). Собственно вопрос: как сделать подобное для работы под всеми (или большей частью) браузеров?
    Спустя 41 сек.
    И ребят, поправьте предварительный просмотр сообщения, ибо там php код выполнился)
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 августа 2009 г. 10:47, спустя 2 минуты 1 секунду

    И ребят, поправьте предварительный просмотр сообщения, ибо там php код выполнился)
    Нет, это просто порядковый номер для подсветки, это не ваши циыерки :)
    Спустя 28 сек.
    подсветку поправим, думаю и надеюсь сегодня
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 23 августа 2009 г. 10:54, спустя 6 минут 53 секунды

    Ясно. А по моему вопросу что скажете?
    Спустя 76 сек.
    Нашёл ещё вот такой код:

     ini_set("output_buffering",0); 
    header("Pragma: no-cache");
    header("Cache-Control: no-cache, no-store, private");
    ob_implicit_flush( true );
    echo '123<br>';
    sleep(1);
    echo '123<br>';
    sleep(1);
    echo '123<br>';
    sleep(1);
    echo '123<br>';
    sleep(1);
    echo '123<br>';
    sleep(1);
    echo '123<br>';
    sleep(1);
    echo '123<br>';
    ob_end_flush();


    В опере работает отменно. Переделываю его на:

    ini_set("output_buffering",0);  
    ob_implicit_flush( true );
    for($j=0;$j<100;$j++)
    {
    sleep(1);
    echo $j;
    }
    ob_end_flush();


    и снова именно в опере не работает :(
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 23 августа 2009 г. 11:06, спустя 12 минут 5 секунд

    А вообще, в идеале, хочется узнать как сделать подобное: http://to.lcc.ru/test
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 23 августа 2009 г. 11:10, спустя 4 минуты 42 секунды

    Такое на аякс лучше делать
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 23 августа 2009 г. 11:47, спустя 36 минут 23 секунды

    Как?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 23 августа 2009 г. 11:59, спустя 12 минут 31 секунду

    ajax
    use jquery
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 августа 2009 г. 12:25, спустя 26 минут


    Моя цель: выводить циферки от 0 до 99 по-очереди! Проблема собственно в том, что в опере сие чудо не работает (в отличие от мозилы и осла, к примеру). Собственно вопрос: как сделать подобное для работы под всеми (или большей частью) браузеров?


    почему для этого javascript вам не подходит?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 23 августа 2009 г. 12:54, спустя 29 минут 5 секунд

     ini_set("output_buffering",0); 
    header("Pragma: no-cache");
    header("Cache-Control: no-cache, no-store, private");
    ob_implicit_flush( true );
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    ob_end_flush();

    метод нормальный только сначала надо выдать 1024 пробела, это особенность пхп, первый буфер выбрасывает только 1 килобайт
    Спустя 27 сек.
    ну и флаш после каждого эхо
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 23 августа 2009 г. 14:16, спустя 1 час 21 минуту 59 секунд


    ajax
    use jquery

    Ой какой ответ хороший.. Если бы мог, сразу бы минус поставил за него. Лично я считаю, если не можешь ответить по теме, лучше молчи. О ajax и конкретно о ajax через jQuery я и сам знаю и пользуюсь им, но я не могу найти примеры организации того, что мне нужно!
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 23 августа 2009 г. 14:18, спустя 1 минуту 16 секунд

    felix90, нормальный ответ , плохо искал
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 23 августа 2009 г. 14:21, спустя 3 минуты 4 секунды



    Моя цель: выводить циферки от 0 до 99 по-очереди! Проблема собственно в том, что в опере сие чудо не работает (в отличие от мозилы и осла, к примеру). Собственно вопрос: как сделать подобное для работы под всеми (или большей частью) браузеров?


    почему для этого javascript вам не подходит?

    Бесспорно подходит, но приведённый мною пример нужен не для организации вывода циферок, как я уже говорил, а для понимая буферизации и в будущем использовании этих знаний.
    Спустя 27 сек.

    felix90, нормальный ответ , плохо искал

    Я бы не полез на пыху, если бы предварительно гугл не мучал)
    Спустя 103 сек.

     ini_set("output_buffering",0); 
    header("Pragma: no-cache");
    header("Cache-Control: no-cache, no-store, private");
    ob_implicit_flush( true );
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    sleep(1);
    echo '123';
    ob_end_flush();

    метод нормальный только сначала надо выдать 1024 пробела, это особенность пхп, первый буфер выбрасывает только 1 килобайт
    Спустя 27 сек.
    ну и флаш после каждого эхо

    1) Этот метод работает в опере и без пробелов.
    2) Пробелы тоже вставлял, но результат нулевой.
    3) Мне нужно, чтобы вот это работало в опере:
    ini_set("output_buffering",0);  
    ob_implicit_flush( true );
    for($j=0;$j<100;$j++)
    {
    sleep(1);
    echo $j;
    }
    ob_end_flush();
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 23 августа 2009 г. 14:29, спустя 8 минут 27 секунд

    felix90, не горячись))
    я так понял, тебе нужно чтобы при таком коде:
    ini_set("output_buffering",0);  
    ob_implicit_flush( true );
    for($j=0;$j<5;$j++)
    {
    sleep(1);
    echo $j;
    }
    ob_end_flush();

    выводилось 01234? у меня в опере 9.64 все работает
    Спустя 283 сек.
    не только в опере такое не работает, но еще и в хроме
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 августа 2009 г. 14:31, спустя 1 минуту 26 секунд




    Моя цель: выводить циферки от 0 до 99 по-очереди! Проблема собственно в том, что в опере сие чудо не работает (в отличие от мозилы и осла, к примеру). Собственно вопрос: как сделать подобное для работы под всеми (или большей частью) браузеров?


    почему для этого javascript вам не подходит?

    Бесспорно подходит, но приведённый мною пример нужен не для организации вывода циферок, как я уже говорил, а для понимая буферизации и в будущем использовании этих знаний.


    Извини, не заметил что ты говорил именно о буферизация, я понял вопрос именно как для вывода циферок через интервалы времени
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 23 августа 2009 г. 14:36, спустя 5 минут 34 секунды





    Моя цель: выводить циферки от 0 до 99 по-очереди! Проблема собственно в том, что в опере сие чудо не работает (в отличие от мозилы и осла, к примеру). Собственно вопрос: как сделать подобное для работы под всеми (или большей частью) браузеров?


    почему для этого javascript вам не подходит?

    Бесспорно подходит, но приведённый мною пример нужен не для организации вывода циферок, как я уже говорил, а для понимая буферизации и в будущем использовании этих знаний.


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

    Из данного примера - совершенно правильно вопрос понял, а вообще я хотел бы узнать как заставить php скрипт выводить результат его работы постепенно, а не всё сразу.
    Спустя 41 сек.

    felix90, не горячись))
    я так понял, тебе нужно чтобы при таком коде:
    ini_set("output_buffering",0);  
    ob_implicit_flush( true );
    for($j=0;$j<5;$j++)
    {
    sleep(1);
    echo $j;
    }
    ob_end_flush();

    выводилось 01234? у меня в опере 9.64 все работает
    Спустя 283 сек.
    не только в опере такое не работает, но еще и в хроме

    У меня на 10-ой опере не выводится((

    З.Ы. хром не люблю, поэтому не ставил.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!