2014-05-19 59 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 - 除非你可以將單行代碼分解成更小的代碼塊。 –