【问题标题】:PHP returns error 500 in browser, but not in shellPHP 在浏览器中返回错误 500,但在 shell 中没有
【发布时间】:2016-06-04 20:41:49
【问题描述】:

我目前正在试验一个名为 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是:

用于 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 日志中显示:

[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

我在这里完全不知所措..我需要帮助!

【问题讨论】:

  • 如果你运行php test.php会怎样
  • 似乎在shell中运行它,无论是什么用户,似乎都可以正常工作。
  • 你试过查看 apache 日志吗?
  • @Justinas:请看顶部,我有,它显示错误...
  • 我不是在谈论 500 错误。 500 错误可能会掩盖错误日志中的其他错误

标签: php apache ispconfig


【解决方案1】:

尝试增加 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]

这似乎是扩展错误。 您可以尝试调试此段错误 (https://bugs.php.net/bugs-generating-backtrace.php) 并将报告发送给扩展开发者。

【讨论】:

  • 尝试设置512M。或者更改 cli 配置的限制(设置为 128 而不是 -1),以验证是内存问题
  • 我不知道 php-fcgi,但是 php-fpm 和 php-cli 有不同的配置文件(我认为 php-fcgi 也有不同的配置 - 也许 /etc/php/fcgi/php .ini 或类似的文件)。
  • /etc/php5/cgi/php.ini & /etc/php5/cli/php.ini & /etc/php5/fpm/php.ini 都有“memory_limit = 512M”,重启apache2 ,同样的结果。 500 浏览器和所有日志中的相同错误。
  • php7 分支的段错误预计会失败。正如他在自述文件中提到的那样,这仍在进行中。我正在使用它应该工作的 php5.6 分支。
  • 但是无论如何,信号 11 - 这是段错误。你可以调试它((bugs.php.net/bugs-generating-backtrace.php
猜你喜欢
  • 2015-10-08
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
相关资源
最近更新 更多