2014-05-19 29 views
2

我有一个通过CLI运行的PHP脚本,运行良好,但它运行了几个长的查询(2-5分钟),理想情况下会给你一些想法,即仍在发生某些事情。在遍历结果时,我确实有一个运行的函数来更新进度,但是当PHP正在等待查询返回时,就会发生沉默。在查询运行时在CLI上显示一个指示灯

我并不需要知道任何有关查询将完成,但某种指示的CLI,它的做的事情将是一个巨大的增益(binking ...,或东西)。可能?

+0

是具有“这可能需要5分钟以上”打印出来真不够用?价值如何被返还?你有多个线程或某种事件循环? –

+0

Q1。这足够了。仍然希望看到我的问题的答案。 Q2。查询的结果被插入到不同的表中。 Q3。不,单线程。 – Chords

回答

1

我发现使用回车\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)); 
    } 
} 
+0

我有类似的东西,当有一个迭代,但如果有一行代码关闭了几分钟的查询运行,有没有办法表明它很忙? – Chords

+0

@Chords - 除非你可以将单行代码分解成更小的代码块。 –