<?php 
 
/********************************************************************* 
 * 
 * Name: MultiotpShowStatus 
 * Short description: Show a progress status bar in the console 
 * 
 * Creation 2010 
 * Source: http://brian.moonspot.net/status_bar.php.txt 
 * @author Copyright (c) 2010, dealnews.com, Inc. - All rights reserved. 
 * 
 * Adapted 2010-2014 by SysCo/al 
 * 
 * @param   int     $done   how many items are completed 
 * @param   int     $total  how many items are to be done total 
 * @param   int     $size   optional size of the status bar 
 * @return  void 
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met: 
 * 
 * - Redistributions of source code must retain the above copyright notice, 
 *   this list of conditions and the following disclaimer. 
 * - Redistributions in binary form must reproduce the above copyright 
 *   notice, this list of conditions and the following disclaimer in the 
 *   documentation and/or other materials provided with the distribution. 
 * - Neither the name of dealnews.com, Inc. nor the names of its contributors 
 *   may be used to endorse or promote products derived from this software 
 *   without specific prior written permission. 
 * 
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
 *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 *  POSSIBILITY OF SUCH DAMAGE. 
 * 
 * 
 * Usage 
 *  
 * for($x=1;$x<=100;$x++) 
 * { 
 *     MultiotpShowStatus($x, 100); 
 *     usleep(100000); 
 * } 
 * 
 * @param   int     $done   how many items are completed 
 * @param   int     $total  how many items are to be done total 
 * @param   int     $size   optional size of the status bar 
 * @return  void 
 * 
 *********************************************************************/ 
function MultiotpShowStatus($done, $total, $size=30) 
{ 
 
    static $start_time; 
 
    // if we go over our bound, just ignore it 
    if($done > $total) return; 
 
    if(empty($start_time)) $start_time=time(); 
    $now = time(); 
 
    $perc=(double)($done/$total); 
 
    $bar=floor($perc*$size); 
 
    $status_bar="\r["; 
    $status_bar.=str_repeat("=", $bar); 
    if($bar<$size) 
    { 
        $status_bar.=">"; 
        // $status_bar.=str_repeat(" ", $size-$bar); 
        $status_bar.=str_repeat("-", $size-$bar); 
    } 
    else 
    { 
        $status_bar.="="; 
    } 
 
    $disp=number_format($perc*100, 0); 
 
    $status_bar.="] $disp%  $done/$total"; 
 
    $rate = ($now-$start_time)/$done; 
    $left = $total - $done; 
    $eta = round($rate * $left, 2); 
 
    $elapsed = $now - $start_time; 
 
    // $status_bar.= " remaining: ".number_format($eta)." sec.  elapsed: ".number_format($elapsed)." sec."; 
 
    echo "$status_bar  "; 
 
    flush(); 
 
    // when done, send a newline 
    if($done == $total) 
    { 
        echo "\n"; 
    } 
} 
 
?>
 
 |