在PHP 中進行批處理操作時,通常會遇到需要在處理過程中給用戶顯示進度的需求。使用time_nanosleep函數可以實現高精度的睡眠控制,從而在批處理過程中模擬出進度條的更新效果。本文將介紹如何利用time_nanosleep結合簡單的命令行進度條,實現帶進度提示的批處理操作。
time_nanosleep是PHP 中用於暫停程序執行的函數,它允許程序暫停秒和納秒級別的時間,格式如下:
bool time_nanosleep(int $seconds, int $nanoseconds);
$seconds :整數秒數
$nanoseconds :納秒數,1秒=10億納秒
相較於sleep和usleep , time_nanosleep提供了更高精度的時間控制,適合需要細粒度等待的場景。
設定總處理步驟數,如100。
每處理一部分任務後,更新進度條顯示。
通過time_nanosleep來模擬每個步驟的處理時間,方便演示。
下面代碼展示瞭如何用time_nanosleep來實現一個命令行進度條。
<?php
$totalSteps = 50; // 總步驟數
$barWidth = 40; // 進度條寬度
echo "開始批處理操作...\n";
for ($i = 1; $i <= $totalSteps; $i++) {
// 模擬任務處理時間,睡眠50毫秒
time_nanosleep(0, 50 * 1000000);
// 計算進度百分比
$progress = $i / $totalSteps;
$filledLength = round($barWidth * $progress);
// 構造進度條字符串
$bar = str_repeat("=", $filledLength) . str_repeat(" ", $barWidth - $filledLength);
// 輸出進度條和百分比,使用 "\r" 回到行首,實現動態更新
printf("\r[%s] %.2f%%", $bar, $progress * 100);
flush();
}
echo "\n批處理操作完成!\n";
使用time_nanosleep(0, 50 * 1000000)使程序暫停50 毫秒,模擬每步處理時間。
利用\r控製字符回到行首,實現進度條動態刷新。
printf輸出格式化的進度條和百分比。
flush()確保輸出及時顯示。
如果批處理任務是真實操作,可將睡眠替換為具體任務執行邏輯。
結合輸出日誌或錯誤信息,更利於調試和監控。
可調整$barWidth和睡眠時間來控制進度條的顯示效果和刷新速度。
更多關於time_nanosleep的官方文檔可見:
https://gitbox.net/manual/en/function.time-nanosleep.php