В настоящее время я экспериментирую с плагином PHP под названием Mosquitto PHP (https://github.com/mgdm/Mosquitto-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
Из любопытства я перешел к сценарию в оболочке и запустил его:
sudo php test.php
В результате в моем ssh напечатано «Finished», и оно отправило сообщение через брокера.
Это заставило меня думать, что это странная ошибка разрешения. Исследуя далее, я нашел это в моих журналах:
Мой журнал 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 это показывает:
[Вторник 07, 14: 08: 25.567945 2016] [fcgid: warn] [pid 27861] (104) Сброс соединения по пиру: [клиент 93.135.88.60:49328] mod_fcgid: ошибка чтения данных с сервера FastCGI
[Вторник 07, 14: 08: 25.568016 2016] [core: error] [pid 27861] [client 93.135.88.60:49328] Конец вывода сценария перед заголовками: test.fcgi
Я полностью потерян для слов здесь .. Мне нужна помощь !!
Попробуйте увеличить память для php-fcgi (по умолчанию для cli memory_limit = -1).
Я думаю, что этот случай должен решить вашу проблему.
ОБНОВИТЬ
Я установил комаров (от php7 ветка) и попробуйте (запустите test.php из примеров репозитория. php 7.0.7). И у меня есть Segfault для
segfault at 8 ip 00005574a41c753f sp 00007ffc2dc85da0 error 6 in php7.0[5574a3f80000+391000]
Кажется, это ошибка расширения.
Вы можете попробовать отладить этот segfault (https://bugs.php.net/bugs-generating-backtrace.php) и отправить отчет разработчикам расширений.
Других решений пока нет …