今天在网上看到有人提问关于以上几个方法的区别与用法,所以上网查了一下
首先说一下他们的共同点,首先当然他们都是执行shell脚本的方法,其次都可以向它们传递一个参数引用来获得执行状态码。
命令名称 是否将标准输出输出到终端 返回结果
exec 否 shell命令输出结果的最后一行
shell_exec 否 shell命令全部的输出
system 是 shell命令输出结果的最后一行
passthru 是 NULL
当然还会有一些疑问,比如他们是否都会阻塞php脚本
答案是:一般情况是的
例如 exec("sleep 2>test.log 2>&1 &");
把shell放到后台执行,这里一定注意光是把作业放到后台是不行的,而且必须把标准输出重定向(标准错误不一定需要,但是建议习惯性这样做)