繁体   English   中英

巨大的 error_log 在 public_html 目录中的 Joomla 站点中填充了零,导致服务器挂起

[英]Huge error_log filled with zeros at Joomla site in public_html directory causing server hang

我不确定这是否与 PHP 代码/Joomla 插件/组件或服务器问题有关,因此请在 serverfault 上发布我的问题。

我有一台运行 CentOS 6.4 版(最终版)和 CPanel 11.38.1(构建 15)和 [Apache/2.2.24 (Unix) PHP/5.2.17] 的专用服务器,最近我们遇到了导致系统挂起的蛮力攻击诸如“挂起:服务器上的 chkservd”之类的消息。 在设置 DenyHosts 并更改 ssh 默认端口后,服务器稳定了几天,直到它开始突然挂起,日志中没有特定错误,也没有任何电子邮件通知。

服务器只运行一个网站,但有一些流量(每天大约 2000 名访问者)和一个大型 Joomla 数据库。 自 2013 年 3 月至两周前,该网站一直在正常运行。

经过调查,我注意到 public_html(默认 Joomla 站点目录)下的 error_log 大小超过 200MB,但没有特定的错误消息,只有带有日期/时间和零“0”的行!

[24-Jul-2013 12:09:18] 0
[24-Jul-2013 12:09:18] 0
[24-Jul-2013 12:09:18] 0
[24-Jul-2013 12:09:19] 0
[24-Jul-2013 12:09:19] 0
[24-Jul-2013 12:09:19] 0
[24-Jul-2013 12:09:19] 0
[24-Jul-2013 12:09:20] 0
[24-Jul-2013 12:09:26] 0
[24-Jul-2013 12:09:26] 0
[24-Jul-2013 12:09:30] 0

几乎每一秒,上面都有一千行! 有时站点会因“jos-Error:应用程序实例化错误”而崩溃,有时会因错误而崩溃:

PHP 致命错误:在 ... 中的非对象上调用成员函数 get()

这是由于 Joomla 尝试从数据库加载参数但失败时出现数据库问题。

我已经在安装了 apache 和 php [Apache/2.2.19 (Win32) PHP/5.3.6] 的本地 Windows 服务器机器上设置了站点的备份,并且这些零“0”错误也会在每次站点调用时产生,还有更多\\Apache2\\logs\\error.log 中的详细信息,例如:

[Wed Jul 24 14:42:32 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:32 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:32 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:33 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:33 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:33 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:56 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki
[Wed Jul 24 14:42:56 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki
[Wed Jul 24 14:42:56 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki
[Wed Jul 24 14:42:57 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki
[Wed Jul 24 14:42:57 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki

因此我认为它与服务器无关,而是与插件/组件相关的 Joomla 站点。

此外,我们还使用在线站点扫描程序扫描了该站点,并使用防病毒工具进行了纯文件搜索以进行机器人注入,但没有任何积极的结果。

我们如何定位导致这些零作为错误的原因?

最后我找到了导致这些零错误的原因。

首先,为了找到产生这些错误的原因,我对 php 函数error_log() ( http://php.net/manual/en/function.error-log.php ) 的所有站点 php 文件进行了 grep,其中直接写入字符串参数消息,没有任何其他信息,如文件名、行号等。结果我看到有一个error_log(0); 在启用它的 Joomla 插件中。 打开插件 php 文件后,我发现这是我为了调试某些东西而添加的内容,而我完全忘记了那里。 因此,删除该行后,不再有零字符错误。 我什至不记得我想通过那个电话达到什么目的,它根本没有任何意义。 也许我想使用error_reporting(0)来禁用所有错误和输入错误。

需要说明的是,这些错误与服务器崩溃/挂起无关,根本不负责。 我通过创建新数据库并恢复备份文件来修复崩溃,因此旧数据库已损坏。

现在,24 小时后,没有崩溃/挂起,一切再次完美。

编辑:

经过进一步调查,我意识到这个error_log(0)不是我添加的,当我安装插件时它已经存在了! 插件/组件是Joooid ,Joomla 的 Android 客户端 ( http://www.joooid.com )。 代码位于 joooidcontent.php 中的 plg_joooidcontent:

...
/**
 * @since   1.6
 */
public function onContentPrepare($context, &$row, &$params, $page=0)
{

    error_log(0);
    //echo "<pre>"; 
    $row ->text = $this->executeTokens($row->text);
    //print_r($row);
    //die();

}
...

即使是现在,它也有最新版本。 我将向他们发送此问题的链接,以便通知他们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM