PHP exec () 和运行 shell 脚本给出不同的结果


PHP exec () and running shell script gives different results

我有script.sh,它向某个URL发送请求并使用whet打印执行时间。以下是源代码:

time wget http://some.url

当我从命令行运行它时,我看到时间结果的精度为小数点后 3 位:

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

但是,当我使用 PHP 函数 exec("script.sh", $output) - 运行这个 SH 时,我看到时间结果的精度仅为小数点后 2 位:

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

我怎样才能得到与我在命令行中看到的相同的结果?

答案在手册中:

注意:一些 shell(例如, 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"