在通过shell执行命令后不要返回输出

Fedora 20中执行php脚本之后:

echo shell_exec('which systemctl'); 

显示空string。

如果在命令行中执行' systemctl ',则显示如下:

 /usr/bin/which: no systemctl in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin) 

如何让我通过PHP接收这个输出?

因为systemctl不在你的路径上(或不在你的系统上) which systemctl返回错误信息

 /usr/bin/which: no systemctl in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin) 

当你使用shell_exec('which systemctl');在PHP中运行它时shell_exec('which systemctl'); 标准错误不收集,标准输出为空。 因此PHP看到一个空字符串。

您可以使用此命令获得标准错误:

 shell_exec('which systemctl 2>&1'); 

我在我的项目中使用passthru,如下面的代码:

 $output = ''; ob_start(); passthru('which systemctl', $output); $output = ob_get_contents(); ob_end_clean(); 

和shell_exec也返回一个输出,请参阅文档在这里: http : //php.net/manual/en/function.shell-exec.php

但是,passthru和shell_exec正在工作。