我目前正在试验一个名为 Mosquitto PHP ( https://github.com/mgdm/Mosquitto-PHP/ ) 的 PHP 插件。我已经全部安装好了,并且在“php -m”下它似乎正确显示。
我正在使用一个小的测试代码来查看它的基本形式是否有效:
<?php
$c = new Mosquitto\Client;
$c->onConnect(function() use ($c) {
$c->publish('mgdm/test', 'Hello', 2);
});
$c->connect('test.mosquitto.org');
for ($i = 0; $i < 100; $i++) {
// Loop around to permit the library to do its work
$c->loop(1);
}
echo "Finished\n";
?>
这似乎在我的浏览器中返回“完成”。所以,我决定升级我的游戏,并添加一个 TLS 连接,如记录的那样:
<?php
$c = new Mosquitto\Client;
$c->onConnect(function() use ($c) {
$c->publish('mgdm/test', 'Hello', 2);
});
$c->setTlsCertificates('mosquitto.org.crt');
$c->connect('test.mosquitto.org', '8883');
for ($i = 0; $i < 100; $i++) {
$c->loop(1);
}
echo "Finished\n";
?>
我得到了证书,我确保 apache2 可以读取它并将所有权随后设置为 apache2。结果这在我的浏览器中给了我 500 内部服务器错误。
-rwsrwsrwt 1 www-data www-data 279 Jun 5 04:12 test.php
-rwxrwxrwx 1 www-data www-data 1078 Jun 30 2012 mosquitto.org.crt
出于好奇,我导航到 shell 中的脚本并运行它:
sudo php test.php
这导致在我的 ssh 中打印出“已完成”,并通过代理发送消息。
这让我觉得这是一种奇怪的权限错误。进一步调查,我在我的日志中发现了这些:
我的 apache2 日志:
mod_fcgid:进程 /var/www/php-fcgi-scripts/web1/.php-fcgi-starter(20614) 退出(通信错误),得到意外信号 11
mog_fcgid 安装的是:
libapache2-mod-fcgid 1:2.3.9-1+b1 amd64 FastCGI 接口模块,用于 Apache 2
据我所知,与启用 suexec 相同。:
模块 fcgid 已启用
模块 suexec 已启用
在一个小小的事件中,我将 .php 更改为 .fcgi 并授予它 +x 权限,现在消息通过代理,但它仍然在我的浏览器中给出 500 错误。
suexec 日志显示:
[2016-06-07 14:05:58]:uid:(5004/web1)gid:(5005/client0)cmd:test.fcgi
在我的 ispconfig 日志中显示:
[Tue Jun 07 14:08:25.567945 2016] [fcgid:warn] [pid 27861] (104) Connection reset by peer: [client 93.135.88.60:49328] mod_fcgid:从 FastCGI 服务器读取数据时出错
[Tue Jun 07 14: 08:25.568016 2016] [core:error] [pid 27861] [client 93.135.88.60:49328] 标头之前的脚本输出结束:test.fcgi
我在这里完全失语了..我需要帮助!