Metainformationen zur Seite
  •  
Übersetzungen dieser Seite:
  • de

PHP Overview

Console: Simple Progress Bar

Say you are running a loop in a console script, and you want to display the progress to the user.
It would be nice to have a progress bar.

Let's start to make this!

We will initialize our loop counting variables, and some configuration for the progress bar:

// This is the running variable:
$current = 0;
// This is the maximum number of items for the loop:
$count = 10;
// Normalized maximum of progress bar sections
// This will paint 20 progress characters for 100%
$progress_max = 10;
// Character for single progress count
$cDone = '+';
// Character for not yet done progress item
$cToDo = '.';

Start the loop:

while($current < $count) {
    // Do calculations for each item here
}

Calculate the current progress:

    // inside the loop, increment the counter
    $current++;
 
    // calculate the normalized progress counter
    $progress = round($current/$count * $progress_max);
 
    // Print progress
    // e.g. 2/10 [++........]
    fwrite(
        STDERR, // Print to standard error
        "\033[100D" // rewind back cursor position to left 100 positions on this line
        .sprintf('% '.strlen($count).'d', $current) // left pad $current to length of $count string
        ."/$count "
        "[" // left bracket for progress bar
        .str_repeat($cDone, $progress) // print finished items characters
        .str_repeat($cToDo, $progress_max - $progress) // print items to be done characters
        .']' // left bracket for progress bar
    );

And here is how the final result looks like:

 0/10 [+.........]
 5/10 [+++++.....]
10/10 [++++++++++]

Enjoy.