Как сделать так, чтобы следующий код: PHP: PHP: <?php while(true) { echo 'строка<br>'; sleep(1); } ?> выводил надпись "строка" через каждую секунду а не после остановки загрузки страницы? первое что приходит в голову конечно AJAX, но если глянуть на работу Sypex Dumper Lite - то вопрос как они это сделали?
так? PHP: <?php while(true) { echo 'строка<br>'; flush(); sleep(1); } ?> правда не факт что в IE сработает
так а теперь немного не по теме: а как сделать так чтобы добавлять например содержимое в некий div в процессе выполнения php-скрипта?
Вот более конкретно, как заставить работать такой вот пример: PHP: <?php echo <<<HTML <DIV ID="logarea" STYLE="width: 200; height: 140px; border: 1px solid #7F9DB9; padding: 3px; overflow: auto;"></DIV> <SCRIPT> function logger(str){ with(document.getElementById('logarea')){ innerHTML += innerHTML ? "<BR>\\n" + str : str; scrollTop += 14; } } </SCRIPT> HTML; function put_log($mess) { echo "<SCRIPT>logger('$mess');</SCRIPT>"; } flush(); for ($i=0; $i<10; $i++) { put_log($i); flush(); sleep(2); } ?>
Тему можно закрывать... после недолгих мучений найдено простое решение может кому пригодится: PHP: <?php echo <<<HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <TITLE></TITLE> <META HTTP-EQUIV=Content-Type CONTENT="text/html; charset=windows-1251"> <STYLE TYPE="TEXT/CSS"> <!-- body{ overflow: auto; } input, select, div { font: 11px tahoma, verdana, arial; } #logarea { height: 140px; width: 200px; border: 1px solid #7F9DB9; padding: 3px; overflow: auto; } --> </STYLE> </HEAD> <BODY BGCOLOR="#ECE9D8" TEXT="#000000"> <SCRIPT> function logger(str){ with(document.getElementById('logarea')){ innerHTML += innerHTML ? "<BR>\\n" + str : str; scrollTop += 14; } } </SCRIPT> <DIV ID="logarea"></DIV> </BODY> </HTML> HTML; flush(); function put_log($mess) { echo "<SCRIPT>logger('$mess');</SCRIPT>"; } for ($i=0; $i<20; $i++) { put_log($i); flush(); sleep(1); } ?>
ну барин если у вас нет таких задач - это не значит что их у других нету... обьясню: нуно это для мониторинга работы моего сканер-грабера контента почти с 600 страниц одного сайта!
Очередное решение для удаления гланд через анус. Тут надо скрипту ignore_user_abort(), а данные через AJAX получать. Чтоб по человечески было.
enshtein ini_set('implicate_flush','On'); после чего блоки будут отсылаться после каждого вызова flush();
У IE есть особенность, пока он не получает ~255 символов, он ничего не выводит на экран. И как правило, со стороны PHP с этим просто ничего нельзя сделать, но может и можно - я копал давно и не очень глубоко и реально это не использовал. Я решил это тем, что выводил что надо и просто добавлял str_repeat'ом пробелов до 255 символов - всё прекрасно выводилось. Повторяю, это было давно, делал я это только для проверки как это пашет на похожий вопрос, копал я не долго и пришёл к выводу о 255 символах