我有一個通過CLI運行的PHP腳本,運行良好,但它運行了幾個長的查詢(2-5分鐘),理想情況下會給你一些想法,即仍在發生某些事情。在遍歷結果時,我確實有一個運行的函數來更新進度,但是當PHP正在等待查詢返回時,就會發生沉默。在查詢運行時在CLI上顯示一個指示燈
我並不需要知道任何有關當查詢將完成,但某種指示的CLI,它的做的事情將是一個巨大的增益(binking ...
,或東西)。可能?
我有一個通過CLI運行的PHP腳本,運行良好,但它運行了幾個長的查詢(2-5分鐘),理想情況下會給你一些想法,即仍在發生某些事情。在遍歷結果時,我確實有一個運行的函數來更新進度,但是當PHP正在等待查詢返回時,就會發生沉默。在查詢運行時在CLI上顯示一個指示燈
我並不需要知道任何有關當查詢將完成,但某種指示的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));
}
}
我有類似的東西,當有一個迭代,但如果有一行代碼關閉了幾分鐘的查詢運行,有沒有辦法表明它很忙? – Chords
@Chords - 除非你可以將單行代碼分解成更小的代碼塊。 –
是具有「這可能需要5分鐘以上」打印出來真不夠用?價值如何被返還?你有多個線程或某種事件循環? –
Q1。這足夠了。仍然希望看到我的問題的答案。 Q2。查詢的結果被插入到不同的表中。 Q3。不,單線程。 – Chords