具体区别如下:
$command = 'whoami';
//不直接输入结果内容,命令执行结果的最后一行内容,第二个参数可获取到所有返回结果,每行结果作为一个数组记录,第三个参数返回命令执行的状态码,0代表成功1失败
$resultData =exec($command,$output,$returnVal);
//直接将结果输出到浏览器,成功则返回命令输出的最后一行, 失败则返回 FALSE,第二个参数返回命令执行的状态码,0代表成功1失败
$resultData = system($command,$returnVal);
//直接将结果输出到浏览器,没有返回值,且可输出二进制,比如图片数据。第二个参数返回命令执行状态码,0代表成功1失败
$resultData = passthru($command,$returnVal);
//命令执行的输出。 如果执行过程中发生错误或者进程不产生输出,则返回 NULL。
$resultData = shell_exec($command);
一般用exec()会比较多,有返回值和状态码,shell_exec()仅有返回值,没有状态码返回
system()和passthru()都会直接将结果输出到浏览器,若是用户图像二进制输出时,passthru()更符合要求,且配合header,eg:header("Content-type:image/gif"); 可直接将图像输出。
问题解决:
Q:exec, system, passthru, shell_exec 在windows中不生效问题
A:确定是否是用户权限问题,将同样命令在cmd中看是否能够正常执行。如果可以,将电脑重启后,再试试。
参考地址: