PHP在浏览器中返回错误500,但在Shell中未返回

use*_*843 5 php apache ispconfig

我目前正在尝试使用名为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";
?>
Run Code Online (Sandbox Code Playgroud)

而且似乎在我的浏览器中返回“完成”。因此,我决定升级游戏,并向其添加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";
?>
Run Code Online (Sandbox Code Playgroud)

我获得了证书,并确保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
Run Code Online (Sandbox Code Playgroud)

出于好奇,我导航到shell中的脚本并使用以下命令运行它:

sudo php test.php
Run Code Online (Sandbox Code Playgroud)

这导致在我的ssh中打印“完成”,并且它通过代理发送了消息。

这使我认为这是一种奇怪的权限错误。经过进一步调查,我在日志中找到了这些:

我的apache2日志:

mod_fcgid:处理/var/www/php-fcgi-scripts/web1/.php-fcgi-starter(20614)退出(通讯错误),得到意外信号11

安装的mog_fcgid是:

适用于Apache 2的libapache2-mod-fcgid 1:2.3.9-1 + b1 amd64 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日志中显示:

[2016年6月7日星期二14:08:25.567945] [fcgid:warn] [pid 27861](104)对等方重置连接:[客户端93.135.88.60:49328] mod_fcgid:从FastCGI服务器读取数据时出错
[2月7日14日: 2016年8月25日:568.56816] [核心:错误] [pid 27861] [客户端93.135.88.60:49328]标头之前的脚本输出结束:test.fcgi

我完全不知道在这里说什么了。我需要帮助!

Dmy*_*tro 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]
Run Code Online (Sandbox Code Playgroud)

看来这是扩展错误。您可以尝试调试此段错误(https://bugs.php.net/bugs-generate-backtrace.php)并将报告发送给扩展开发人员。