如何解决PHP 没有执行 ps 命令可能是权限问题?
我在命令行上使用 php test.php
测试了一个小脚本。
test.php
<?php
exec('ps -acux | grep test',$testvar);
print_r($testvar);
?>
这很好用。我能够运行脚本并获得所需的结果。但是,当我将代码添加到 PHP 服务器正在运行的文件中时,结果为空。
我的操作系统是 FreeBSD
。查看 ps
的 man page,我看到的唯一限制是 -a
选项。它指出:
如果security.bsd.see_other_uids sysctl 设置为零,这个选项 仅当用户的 UID 为 0 时才有效。
我的 security.bsd.see_other_uids 设置为 1。
$ sysctl security.bsd.see_other_uids
security.bsd.see_other_uids: 1
我唯一能想到的是,当我通过命令行运行该命令时,该命令由我的用户运行,而由 PHP 运行时,它由 www
运行。我在 ps
的手册中没有看到任何内容表明 www
不应能够运行该命令。
解决方法
根据评论,您需要将 stderr
重定向到 stdout
。这是通过 2>&1
到您的命令末尾实现的。因此,PHP exec()
的示例如下:
exec('ps -acux | grep test 2>&1',$testvar);
这让您可以看到潜在的错误。就我而言,没有错误,可能是某种错误。但是,这在您执行命令的所有情况下都很有用。如果发生任何错误,您可以检索它以查看您的命令发生了什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。