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);

如果 $retval1,这意味着 which 没有找到 mysql 二进制文件,并且 return 是一个空行。