2016-01-22 115 views
2

我有script.sh,它向一些URL發送請求並使用whet打印執行時間。這裏是源代碼:PHP exec()和正在運行的shell腳本給出了不同的結果

time wget http://some.url 

當我從命令行運行它,我看到時間的結果與3位小數的精度:

real 0m0.584s 
user 0m0.000s 
sys  0m0.002s 

但是,當我使用PHP函數運行此SH exec("script.sh", $output) - ,我看到時間的結果僅爲2位小數的精度:

0.00user 0.00system 0:00.32elapsed 0%CPU (0avgtext+0avgdata 3788maxresident)k 

我怎樣才能得到相同的結果,正如我在命令行中也看到了嗎?

+0

欺騙PHP版本以爲它正在從一個交互shell中運行(例如,一個真正的終端窗口)。如果許多應用程序檢測到輸出將轉到非交互式環境,則會將其輸出重新格式化爲更「後處理」友好。 –

回答

2

答案是in the manual

注意:一些殼(例如,bash的(1))具有一個內置的,其提供比這裏所描述的命令更少的功能的時間的命令。要訪問真實命令,您可能需要指定其路徑名(類似/ usr/bin/time)。

內置的bash可以提高精度;如果你從shell運行/usr/bin/time,你也會看到兩個小數位。

不幸的是,time是一個特殊情況,它是一個關鍵字,而不是實際的內置命令。否則bash的builtin命令可以用來強制它。

所以看起來你堅持保留兩位小數,除非你想嘗試不同的方法:

start_time=`date +%s%N` 
wget http://some.url 
end_time=`date +%s%N` 
bc -l <<< "scale=4;($end_time - $start_time)/1000000000" 
相關問題