| 
<?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";
 }
 }
 
 ?>
 |