在Fedora 20中执行php脚本后:
echo shell_exec('which 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)
我如何通过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中运行它时,不会收集标准错误,并且标准输出为空。因此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都在工作