exec ( string $command , array &$output = ? , int &$return_var = ? ) : string
shell_exec ( string $cmd ) : string
system ( string $command , int &$return_var = ? ) : string
passthru ( string $command , int &$return_var = ? ) : void
对比: 4个函数均不会返回脚本执行过程中的错误和警告信息。Unix状态码为最后执行那条语句的退出码(exit语句的退出码就是参数指定的值),前面语句报错不影响后面语句执行,也不影响后面语句的退出码,所以应该在脚本里面做好错误判断,如果有非预期结果,提前以非0状态码退出执行。
下面看实际效果
test.sh
#!/bin/bash
echo 'first line'
echo 'second line'
cd /nonexistent
linux下输出:
$return = exec('./test.sh', $output, $return_var);
var_dump($return, $output, $return_var);
页面输出:
$return = shell_exec('./test.sh');
var_dump($return);
页面输出:
$return = system('./test.sh', $return_var);
var_dump($return, $return_var);
页面输出:
$return = passthru('./test.sh', $return_var);
var_dump($return, $return_var);
页面输出:
注意后两个函数的页面输出中,前两行为标准输出,后面的才是var_dump的输出。