PHP. Отображение циклических данных.

Допустим, вы организовали циклическую отправку писем и хотите видеть, какое письмо отправляется в данный момент времени. Это можно организовать через неявную очистку буфера.
Неявная очистка приводит к тому, что очистка буфера будет выполнятся после каждой операции вывода в окно браузера (функциями echo, print и т.п.), поэтому явные вызовы функции flush() не понадобятся.

Включение неявной очистки отключает буферизацию вывода, текущее содержимое буфера вывода будет отправлено, так как если бы вызывалась функция ob_end_flush().
Ниже пример, иллюстрирующий вывод текущего значения счётчика цикла. Также реализован progressbar.

файл progressbar.php:

<?php
    set_time_limit(600);   
    header("Expires: Tue, 1 Jul 2003 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Pragma: no-cache");   
    ob_implicit_flush();
?>

<style type="text/css">
#wrap {width:700px; margin:0px auto; }
#display{
    border:1px solid #ddd;
    padding:5px;
    text-align:left;
    height:100px;
    overflow-y:scroll
}
#progress {margin-top:5px; height:22px}
body {font-family:Arial; text-align:center;}
#progress {border:1px solid #496A71}
#st_tab {
    background:#0F849D;
    FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#CCCCFF,endColorStr=#5555CC);
    border-right: 1px solid #AAAAAA
}
#st_tab td {text-align:center; color:#fff}
</style>

<script type="text/javascript">
function indicator(str, persent){
    document.getElementById('display').innerHTML += str;
    document.getElementById('display').scrollTop += 24;
    document.getElementById('progressBar').innerHTML = persent + '%';
    document.getElementById('st_tab').width = persent ? persent + '%' : '1';    
}
</script>

<h1>Progress bar</h1>
<div id="wrap">
    <div id="display"></div>
    <div id="progress">
        <table width="1" cellpadding="0" cellspacing="0" id="st_tab">
            <tr>
                <td height=22 ID="progressBar"></td>
            </tr>
        </table>
    </div>
</div>

<?php
    function indicator($str = '', $persent)
    {
        echo '<script>indicator("'.$str .'", '.$persent.')</script>';
    }   
    $total = 1000;
    for($i = 0; $i < $total; $i++)
    {
        $persent = 100 - floor( (($total-$i)*100) / $total );
        $str = '<div>'.$i.'</div>';
        indicator($str, $persent);
    }                               
?>

Интересное

Отзыв о FirstVDS
При покупке хостинга у FirstVDS мне предложили скидку за годный отзыв в блоге или на форуме....
Git и Bitbucket
Git – это распределенная система контроля версий. Пожалуй, на этом теория заканчивается, так как...
Project Glass — Очки будущего от Google
Компания Google представила суперсовременные «очки дополненной реальности» или Project Glass. Впрочем,...
Проверка сайта на вирусы
Если пользоваться привычной терминологией, то web вирусы не являются вирусами в традиционном...

Комментарии

    Чтобы оставлять комментарии, авторизируйтесь

    Войти через OpenID

    рейтинг0+-
    Популярные
    Точки входа
    Наверх