【问题标题】:Can't Run Mosquitto Commands in PHP无法在 PHP 中运行 Mosquitto 命令
【发布时间】: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]

标签: php mqtt


【解决方案1】:

mosquitto_sub 永远不会返回,除非您使用 -C &lt;number&gt; 告诉它在收到消息后退出。如果没有关于给定主题的消息发布,那么它将永远不会返回。

有真正的 php MQTT 客户端库更适合您正在尝试做的事情,例如https://github.com/mqtt/mqtt.github.io/wiki/libraries#php

mosquitto_pub 不返回任何内容,因此不会打印任何内容。

【讨论】:

  • 感谢您的回答。仍然围绕 AWS iot shadows 的复杂性,而不是您的日常 mqtt 大声笑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 2016-09-07
  • 1970-01-01
  • 2019-07-10
  • 2017-11-02
  • 1970-01-01
相关资源
最近更新 更多