【发布时间】:2018-06-30 12:50:52
【问题描述】:
我无法通过 PHP system()、exec()、shell_exec() 等运行 mosquitto_sub 或 pub 命令。
其他命令(如主机名和 ls)将回显并正常工作。有什么我想念的吗?
这是我所拥有的:
<?php
$message = '{"state":{"desired":{"LED":"ON"}}}';
$cmd = "mosquitto_pub --cafile /var/www/subsystem/crt/rootCA.pem --cert
/var/www/subsystem/crt/crt.pem --key /var/www/subsystem/crt/private.pem -h
myendpoint.amazonaws.com -p 8883 -t '" . "$" .
"aws/things/LED/shadow/update' -m '" . $message . "'";
echo system($cmd);
?>
(我知道缩进时字符串无法正确解析,并且在我的 PHP 文件中,$cmd 变量是单行。)
PS:我也尝试过回显 $cmd 并将其直接复制/粘贴到 shell,它的工作原理没有改变。
谢谢!
【问题讨论】:
-
命令的输出是什么?还要向
system($cmd, $exitCode);添加第二个参数,以查看您从命令中获得的退出值。您如何执行脚本:从 CLI 或通过 HTTP 提供服务?运行脚本的用户是否具有运行该命令所需的权限? -
感谢您的快速回复。我像你建议的那样添加了一个错误变量,但它没有回应:(。apache的用户是apache,并且是一个伪用户,因为我实际上不能“使用”用户,或者它只是运行守护程序。我通过命令行执行 mosquitto_pub 脚本没有问题。我怎样才能让 apache 用户访问 mosquitto 命令?
-
更新:您认为这是权限问题是正确的。这次在我的变量末尾添加“2>&1”给了我一个输出:“警告:无法找到配置目录,未加载默认配置。错误:权限被拒绝错误:权限被拒绝”。我该如何解决这个问题?
-
mosquitto_sub 永远不会返回,除非您使用
-C]