Php 运行查询时在CLI上显示指示器

Php 运行查询时在CLI上显示指示器,php,command-line-interface,Php,Command Line Interface,我有一个通过CLI运行的PHP脚本,它运行得很好,但它运行了两个长查询(2-5分钟),理想情况下,这会让您了解某些事情仍在发生。在遍历结果时,我确实运行了一个更新进度的函数,但是当PHP等待查询返回时,就会出现沉默 我不需要知道任何关于查询何时完成的信息,但是CLI上的某种指示表明它正在做一些事情将是一个巨大的收获(binking…,或者其他什么)。可能吗?我发现使用不带换行符的回车符\r非常有用。它们将输出重置为行首,但不会下移,从而允许您覆盖当前文本 请注意,您需要将行填充到完整长度,否则前

我有一个通过CLI运行的PHP脚本,它运行得很好,但它运行了两个长查询(2-5分钟),理想情况下,这会让您了解某些事情仍在发生。在遍历结果时,我确实运行了一个更新进度的函数,但是当PHP等待查询返回时,就会出现沉默


我不需要知道任何关于查询何时完成的信息,但是CLI上的某种指示表明它正在做一些事情将是一个巨大的收获(binking
,或者其他什么)。可能吗?

我发现使用不带换行符的回车符
\r
非常有用。它们将输出重置为行首,但不会下移,从而允许您覆盖当前文本

请注意,您需要将行填充到完整长度,否则前面的字符仍将保留。例如:

$iteration = 0;
while (/* wait condition */) {
    printf("Process still running%-5s\r", str_repeat('.', $iteration % 5));
    sleep(1);
    $iteration++;
}
echo "\n";
echo "Task completed!";
如果您正在使用
for
循环进行处理,类似这样的东西会更有用:

// Display progress every X iterations
$update_interval = 1000000;

for ($i = 0; $i < $massive_number; $i++) {
    // Do processing

    if ($i % $update_interval == 0) {
        printf("Progress: %.2f%%\r", (100 * $i / $massive_number));
    }
}
//每X次迭代显示一次进度
$update_interval=1000000;
对于($i=0;$i<$i数量;$i++){
//处理
如果($i%$update\u interval==0){
printf(“进度:%.2f%\r”,(100*$i/$u编号);
}
}

打印“这可能需要5分钟或更长时间”真的不够吗?如何返回值?您是否有多个线程或某种事件循环?Q1。这就足够了。仍然希望看到我的问题的答案。问题2。查询结果将插入到另一个表中。第三季度。不,单线程。我有类似的方法用于迭代时,但是如果有一行代码停止运行查询几分钟,有没有方法表明它正忙?@chord-除非你可以将单行代码分解成更小的代码块。