За последние 24 часа нас посетили 63028 программистов и 1742 робота. Сейчас ищут 820 программистов ...

Мгновенный вывод в браузер

Тема в разделе "Прочие вопросы по PHP", создана пользователем enshtein, 31 авг 2007.

  1. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    Как сделать так, чтобы следующий код: PHP:
    PHP:
    1.  <?php
    2.  while(true) {
    3.      echo 'строка<br>';
    4.      sleep(1);
    5.  }
    6.  ?>
    выводил надпись "строка" через каждую секунду а не после остановки загрузки страницы?


    первое что приходит в голову конечно AJAX, но если глянуть на работу Sypex Dumper Lite - то вопрос как они это сделали?
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    так?
    PHP:
    1. <?php
    2.   while(true) {
    3.      echo 'строка<br>';
    4.      flush();
    5.      sleep(1);
    6.   }
    7.   ?>
    правда не факт что в IE сработает
     
  3. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    так а теперь немного не по теме:
    а как сделать так чтобы добавлять например содержимое в некий div в процессе выполнения php-скрипта?
     
  4. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    Вот более конкретно, как заставить работать такой вот пример:
    PHP:
    1. <?php
    2. echo <<<HTML
    3. <DIV ID="logarea" STYLE="width: 200; height: 140px; border: 1px solid #7F9DB9; padding: 3px; overflow: auto;"></DIV>
    4. <SCRIPT>
    5. function logger(str){
    6.     with(document.getElementById('logarea')){
    7.         innerHTML += innerHTML ? "<BR>\\n" + str : str;
    8.         scrollTop += 14;
    9.     }
    10. }
    11. </SCRIPT>
    12. HTML;
    13.  
    14. function put_log($mess) {
    15.     echo "<SCRIPT>logger('$mess');</SCRIPT>";
    16. }
    17.  
    18.  
    19. for ($i=0; $i<10; $i++) {
    20.     put_log($i);
    21.     flush();
    22.     sleep(2);
    23. }
    24. ?>
     
  5. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    Тему можно закрывать... после недолгих мучений найдено простое решение может кому пригодится:
    PHP:
    1. <?php
    2. echo <<<HTML
    3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    4. <HTML>
    5. <HEAD>
    6. <TITLE></TITLE>
    7. <META HTTP-EQUIV=Content-Type CONTENT="text/html; charset=windows-1251">
    8. <STYLE TYPE="TEXT/CSS">
    9. <!--
    10. body{
    11.     overflow: auto;
    12. }
    13. input, select, div {
    14.     font: 11px tahoma, verdana, arial;
    15. }
    16. #logarea {
    17.     height: 140px;
    18.     width: 200px;
    19.     border: 1px solid #7F9DB9;
    20.     padding: 3px;
    21.     overflow: auto;
    22. }
    23. -->
    24. </STYLE>
    25. </HEAD>
    26. <BODY BGCOLOR="#ECE9D8" TEXT="#000000">
    27. <SCRIPT>
    28. function logger(str){
    29.     with(document.getElementById('logarea')){
    30.         innerHTML += innerHTML ? "<BR>\\n" + str : str;
    31.         scrollTop += 14;
    32.     }
    33. }
    34. </SCRIPT>
    35. <DIV ID="logarea"></DIV>
    36. </BODY>
    37. </HTML>
    38. HTML;
    39.  
    40.  
    41. function put_log($mess) {
    42.     echo "<SCRIPT>logger('$mess');</SCRIPT>";
    43. }
    44.  
    45. for ($i=0; $i<20; $i++) {
    46.     put_log($i);
    47.     flush();
    48.     sleep(1);
    49. }
    50. ?>
     
  6. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    теперь возник вопрос: зачем?
     
  7. Veem

    Veem Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    76
    Симпатии:
    0
    Ну вот, ты пробил головой стену...И что ты будешь делать в соседней камере? (с) Станислав Ежи Лец.
     
  8. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    ну барин если у вас нет таких задач - это не значит что их у других нету... обьясню: нуно это для мониторинга работы моего сканер-грабера контента почти с 600 страниц одного сайта!
     
  9. Anonymous

    Anonymous Guest

    Очередное решение для удаления гланд через анус.

    Тут надо скрипту ignore_user_abort(), а данные через AJAX получать.
    Чтоб по человечески было.
     
  10. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    достаточно ифрейм с автосайзом вставить...
     
  11. Anonymous

    Anonymous Guest

    я же сказал - AJAX, я же не сказал XMLHttpRequest only ;)
     
  12. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    enshtein

    ini_set('implicate_flush','On');
    после чего блоки будут отсылаться после каждого вызова flush();
     
  13. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    а я и не предлагал во фрейм грузить XML :)
     
  14. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    У IE есть особенность, пока он не получает ~255 символов, он ничего не выводит на экран. И как правило, со стороны PHP с этим просто ничего нельзя сделать, но может и можно - я копал давно и не очень глубоко и реально это не использовал. Я решил это тем, что выводил что надо и просто добавлял str_repeat'ом пробелов до 255 символов - всё прекрасно выводилось.
    Повторяю, это было давно, делал я это только для проверки как это пашет на похожий вопрос, копал я не долго и пришёл к выводу о 255 символах :)
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    512 и наличие "\n"
     
  16. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    а чё копать-то?
     
  17. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Luge

    ага. спасибо. ошибался. 512 для 404?