【问题标题】:PHP exec () and running shell script gives different resultsPHP exec() 和运行 shell 脚本给出不同的结果
【发布时间】:2016-01-22 16:47:22
【问题描述】:

我有 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

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

【问题讨论】:

  • 欺骗 php 版本,使其认为它是从交互式 shell(例如,真正的终端窗口)运行的。如果检测到输出将进入非交互式环境,许多应用会重新格式化其输出,使其对“后处理”更友好。

标签: php bash shell


【解决方案1】:

答案是in the manual

注意:一些 shell(例如 bash(1))有一个内置的 time 命令,它提供的功能比这里描述的命令少。要访问真正的命令,您可能需要指定其路径名(类似于 /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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2016-08-02
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多