src/util/Console.php
public static function update_progress($done, $total, $prefix = null) {
        $width = self::$_progressWidth;
        if ($width === false) {
            $width = 0;
        } else {
            $screenSize = static::get_screen_size(true);
            if ($screenSize === false && $width < 1) {
                $width = 0;
            } elseif ($width === null) {
                $width = $screenSize[0];
            } elseif ($width > 0 && $width < 1) {
                $width = floor($screenSize[0] * $width);
            }
        }
        if ($prefix === null) {
            $prefix = self::$_progressPrefix;
        } else {
            self::$_progressPrefix = $prefix;
        }
        $width -= static::ansi_strlen($prefix);

        $percent = ($total == 0) ? 1 : $done / $total;
        $info = sprintf("%d%% (%d/%d)", $percent * 100, $done, $total);

        if ($done > $total || $done == 0) {
            $info .= ' ETA: n/a';
        } elseif ($done < $total) {
            $rate = (time() - self::$_progressStart) / $done;
            $info .= sprintf(' ETA: %d sec.', $rate * ($total - $done));
        }

        $width -= 3 + static::ansi_strlen($info);
        // skipping progress bar on very small display or if forced to skip
        if ($width < 5) {
            static::stdout("\r$prefix$info   ");
        } else {
            if ($percent < 0) {
                $percent = 0;
            } elseif ($percent > 1) {
                $percent = 1;
            }
            $bar = floor($percent * $width);
            $status = str_repeat("=", $bar);
            if ($bar < $width) {
                $status .= ">";
                $status .= str_repeat(" ", $width - $bar - 1);
            }
            static::stdout("\r$prefix" . "[$status] $info");
        }
        flush();
    }
public static function update_progress($done, $total, $prefix = null) {
        $width = self::$_progressWidth;
        if ($width === false) {
            $width = 0;
        } else {
            $screenSize = static::get_screen_size(true);
            if ($screenSize === false && $width < 1) {
                $width = 0;
            } elseif ($width === null) {
                $width = $screenSize[0];
            } elseif ($width > 0 && $width < 1) {
                $width = floor($screenSize[0] * $width);
            }
        }
        if ($prefix === null) {
            $prefix = self::$_progressPrefix;
        } else {
            self::$_progressPrefix = $prefix;
        }
        $width -= static::ansi_strlen($prefix);

        $percent = ($total == 0) ? 1 : $done / $total;
        $info = sprintf("%d%% (%d/%d)", $percent * 100, $done, $total);

        if ($done > $total || $done == 0) {
            $info .= ' ETA: n/a';
        } elseif ($done < $total) {
            $rate = (time() - self::$_progressStart) / $done;
            $info .= sprintf(' ETA: %d sec.', $rate * ($total - $done));
        }

        $width -= 3 + static::ansi_strlen($info);
        // skipping progress bar on very small display or if forced to skip
        if ($width < 5) {
            static::stdout("\r$prefix$info   ");
        } else {
            if ($percent < 0) {
                $percent = 0;
            } elseif ($percent > 1) {
                $percent = 1;
            }
            $bar = floor($percent * $width);
            $status = str_repeat("=", $bar);
            if ($bar < $width) {
                $status .= ">";
                $status .= str_repeat(" ", $width - $bar - 1);
            }
            static::stdout("\r$prefix" . "[$status] $info");
        }
        flush();
    }
public static function update_progress ( $ done , $ total , $ prefix = null ) { $ width = self :: $ _progressWidth ; if ( $ width === false ) { $ width = 0 ; } else { $ screenSize = static :: get_screen_size ( true ) ; if ( $ screenSize === false && $ width < 1 ) { $ width = 0 ; } elseif ( $ width === null ) { $ width = $ screenSize [ 0 ] ; } elseif ( $ width > 0 && $ width < 1 ) { $ width = floor ( $ screenSize [ 0 ] * $ width ) ; } } if ( $ prefix === null ) { $ prefix = self :: $ _progressPrefix ; } else { self :: $ _progressPrefix = $ prefix ; } $ width -= static :: ansi_strlen ( $ prefix ) ; $ percent = ( $ total == 0 ) ? 1 : $ done / $ total ; $ info = sprintf ( "%d%% (%d/%d)" , $ percent * 100 , $ done , $ total ) ; if ( $ done > $ total || $ done == 0 ) { $ info .= ' ETA: n/a' ; } elseif ( $ done < $ total ) { $ rate = ( time ( ) - self :: $ _progressStart ) / $ done ; $ info .= sprintf ( ' ETA: %d sec.' , $ rate * ( $ total - $ done ) ) ; } $ width -= 3 + static :: ansi_strlen ( $ info ) ; // skipping progress bar on very small display or if forced to skip if ( $ width < 5 ) { static :: stdout ( "\r$prefix$info   " ) ; } else { if ( $ percent < 0 ) { $ percent = 0 ; } elseif ( $ percent > 1 ) { $ percent = 1 ; } $ bar = floor ( $ percent * $ width ) ; $ status = str_repeat ( "=" , $ bar ) ; if ( $ bar < $ width ) { $ status .= ">" ; $ status .= str_repeat ( " " , $ width - $ bar - 1 ) ; } static :: stdout ( "\r$prefix" . "[$status] $info" ) ; } flush ( ) ; }
Updates a progress bar that has been started by [[startProgress()]].

@param integer $done the number of items that are completed.
@param integer $total the total value of items that are to be done.
@param string $prefix an optional string to display before the progress bar.
Defaults to null meaning the prefix specified by [[startProgress()]] will be used.
If prefix is specified it will update the prefix that will be used by later calls.
@see startProgress
@see endProgress
Updates a progress bar that has been started by [[ startProgress () ]] .