PHP system()、exec() 和 shell_exec() 未返回输出
PHP system(), exec(), and shell_exec() not returning output
我想找到MySQL的正确路径。但是,此命令的输出为空。根据 PHP 的 exec()
命令的手册,此命令应捕获 shell 命令的输出。
<?php
$cmd = "which mysql 2>&1;";
print($cmd."<br>");
exec($cmd, $output, $retval);
var_dump($output);
print("<br>");
var_dump($retval);
?>
输出:
which mysql 2>&1;
array(0) { }
int(1)
命令行输出:
$ which mysql 2>&1;
/usr/local/mysql/bin/mysql
为什么命令出错?为什么变量不包含错误输出,因为命令指定 2>&1
?
我认为问题不是你没有得到执行命令的输出,而是which
找不到mysql
。
使用 exec
可以获得命令的 return 状态,其中 0
表示成功,其他值表示错误。
$output = exec($cmd, $output, $retval);
var_dump($output);
var_dump($retval);
如果 $retval
是 1
,这意味着 which
没有找到 mysql
二进制文件,并且 return 是一个空行。