PHP-CLI 多行进度条

Posted Technofiend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP-CLI 多行进度条相关的知识,希望对你有一定的参考价值。

我们使用php运行任务的时候,通常需要查看进度。要是能有一个像下载进度条一样直观的图就更好了。于是我做了一个。

<?php
/**
*  ______        __             ____             __                        
* /_  __/__ ____/ /  ___  ___  / _(_)__ ___  ___/ /                        
*  / / / -_) __/ _ \\/ _ \\/ _ \\/ _/ / -_) _ \\/ _  /                         
* /_/  \\__/\\__/_//_/_//_/\\___/_//_/\\__/_//_/\\_,_/                          
*    ___  ___  ___ _______ ______________________                          
*   |_  ||_  |( _ <  / __// __<  <  / __<  / ___ \\___ ____ _ _______  __ _ 
*  / __// __// _  / /__ \\/__ \\/ // /__ \\/ / / _ `/ _ `/ _ `// __/ _ \\/  ' \\
* /____/____/\\___/_/____/____/_//_/____/_/\\ \\_,_/\\_, /\\_, (_)__/\\___/_/_/_/
*                                          \\___/  /_/  /_/                 
* 作者:Technofiend <2281551151@qq.com>
* 多进度条输出
*/
ini_set('max_execution_time', '0');

$percentStatus = [];

// 组合成进度条
function buildLine($percent) 
    $repeatTimes = 100;
    if ($percent > 0) 
        $hasColor = str_repeat('■', $percent);
     else 
        $hasColor = '';
    

    if ($repeatTimes - $percent > 0) 
        $noColor  = str_repeat(' ', $repeatTimes - $percent);
     else 
        $noColor  = '';
    

    $buffer      = sprintf("[$hasColor$noColor]");
    if ($percent !== 100) 
        $percentString = sprintf("[   %-6s]", $percent . '%');
     else 
        $percentString = sprintf("[    %-5s]", 'OK');;
    

    return $percentString . $buffer . "\\r";


// 输出进度条
function outputProgress($clear = false)

    global $percentStatus;

    if ($clear) 
        $number = count($percentStatus);
        for ($i=0; $i < $number; $i++)  
            system("tput cuu1");
            system("tput el");
        
    

    foreach ($percentStatus as $value) 
        echo buildLine($value) . "\\n";
    


// 更新进度条值
function updateProgressValue($k, $value) 
    $percentStatus[$k] = $value;
    if ($percentStatus[$k] >= 100) 
        $percentStatus[$k] = 100;
        outputProgress(true);
        return;
    

    outputProgress(true);
    usleep(50000);



$percentStatus[0] = 0;
$percentStatus[1] = 0;
$percentStatus[2] = 0;
$percentStatus[3] = 0;
$percentStatus[4] = 0;
$percentStatus[5] = 0;
$percentStatus[6] = 0;
$percentStatus[7] = 0;
$percentStatus[8] = 0;
outputProgress();
while(1) 
    $percentStatus[0] = rand(0, 100);
    $percentStatus[1] = rand(0, 100);
    $percentStatus[2] = rand(0, 100);
    $percentStatus[3] = rand(0, 100);
    $percentStatus[4] = rand(0, 100);
    $percentStatus[5] = rand(0, 100);
    $percentStatus[6] = rand(0, 100);
    $percentStatus[7] = rand(0, 100);
    $percentStatus[8] = rand(0, 100);
    outputProgress(true);
    usleep(500000);

大家可以复制上面代码,保存成为run.php
然后在linux下 运行 php run.php

以上是关于PHP-CLI 多行进度条的主要内容,如果未能解决你的问题,请参考以下文章

python 使用ANSI控制符实现多行进度条“\ 033 [r; cH”参考:https://www.student.cs.uwaterloo.ca/~cs452/terminal.html缺点:运

python 控制台单行刷新,多行刷新

php.ini 在 php-cli 中重新加载

请问进度条上方带有文字进度、并且跟随进度条移动的进度条该怎么实现?

使用 xdebug 和 netbeans 调试 php-cli 脚本?

android 进度条样式 怎么改