5

現在、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";
?>

そして、それは私のブラウザで「Finished」を返したようです。それで、私は自分のゲームを強化し、文書化されているように、これに 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 Apache 2 用 FastCGI インターフェイス モジュール

そして、私が知る限り、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

ここで言葉を失いました..助けが必要です!!

4

1 に答える 1

3

php-fcgi のメモリを増やしてみてください (cli のデフォルトは memory_limit=-1)。

このケースはあなたの問題を解決するはずだと思います。

アップデート

mosquitto を ( php7ブランチから) インストールして試してみました (リポジトリの例から test.php を実行します。php 7.0.7)。そして、私はセグメンテーションフォールトを持っています

segfault at 8 ip 00005574a41c753f sp 00007ffc2dc85da0 error 6 in php7.0[5574a3f80000+391000]

これは拡張機能のバグのようです。この segfault ( https://bugs.php.net/bugs-generating-backtrace.php ) をデバッグして、拡張機能の開発者にレポートを送信することができます。

于 2016-06-07T06:08:45.773 に答える