J'aimerais pouvoir montrer un indicateur de progression dans un simple script PHP sur la ligne de commande. Au lieu de voir
Progress: 0%
Progress: 1%
etc...
Je voudrais juste que le nombre change et remplace le numéro précédent, un peu comme git clone le fait par exemple Resolving deltas: 100% (8522/8522), done.
.
En cherchant cela, j'ai trouvé même réponse à la question en Perl , ce qui est parfait, mais je ne l'ai pas trouvé en PHP. C'est possible? Sinon, je vais recourir à C.
Merci
Mise à jour: Si quelqu'un est intéressé par la version C++, c'est ici .
Cela peut être fait en utilisant les séquences d'échappement ANSI - voir ici pour une liste.
En PHP, vous utiliserez "\033"
lorsqu'il est indiqué ESC
sur cette page.
Dans votre cas, vous pouvez utiliser quelque chose comme ceci:
echo "Progress : "; // 5 characters of padding at the end
for ($i=0 ; $i<=100 ; $i++) {
echo "\033[5D"; // Move 5 characters backward
echo str_pad($i, 3, ' ', STR_PAD_LEFT) . " %"; // Output is always 5 characters long
sleep(1); // wait for a while, so we see the animation
}
J'ai simplifié un peu, en m'assurant d'avoir toujours 5 caractères supplémentaires, et en affichant toujours la même quantité de données, pour toujours reculer du même nombre de caractères ...
Mais, bien sûr, vous devriez pouvoir faire beaucoup plus compliqué, si nécessaire ;-)
Et il existe de nombreuses autres séquences d'échappement intéressantes: les couleurs, par exemple, peuvent améliorer considérablement votre sortie ;-)
Pour mémoire, un vieux fil de discussion: au lieu d'utiliser un séquencement d'échappement ANSI sophistiqué pour déplacer le curseur vers l'arrière, je le ramène au début de la ligne en utilisant "\ r" au lieu du début de la ligne suivante "\ n" . Ajoutez quelques espaces après votre écho pour écraser tout ce qui s'y trouvait précédemment, comme par exemple donc:
for ($i=0 ; $i<=100 ; $i++) {
echo "Progress: $i % \r";
sleep(1);
}