解决Joomla站点的500错误

维护的某Joomla网站突然不能访问,前后台都报500错误。

网上搜了一下,结合apache日志,初步认为是服务器的配置问题。虽然不明白为什么服务器配置为什么会突然不行(因为应该是没人改过),但因为最近有另外的人也在使用后台,心想也许是他的某个操作触发了隐藏的漏洞或者bug。于是就往服务器配置这条路上走了很远。

网上有说是joomla开通SEF功能后的配置问题的,有要修改.htaccess文件的,等等,都不起作用。怕配置文件改除了隐藏的bug自己没发现,甚至干脆尝试了重装XAMPP,数据库备份后恢复,重新配置apache等。仍然没解决,从中午开始忙到晚上,十分崩溃。

然后看PHP源代码。发现所有的php文件头部都被加入了一段混淆过的php代码,于是看了看规律貌似是这样的:

<?php $rzzeaxkup =  xxxxxxxxxxx此处省去无数混淆过的代码xxxxxxxxxx    $rzzeaxkup=$noamvuns-1; ?>

应该是感染了什么,或者被人利用漏洞入侵了。于是使用正则表达式进行查找替换,全部清除掉了,用到的表达式:

^<\?php \$rzzeaxkup.*\$rzzeaxkup=\$noamvuns-1; \?><\?php

以为问题解决后,结果依然显示500错误。

于是,绕不开的代码啊,干起程序员本行,以行行代码调试。终于发现在/libraries/import.legacy.php中有一行:

require_once JPATH_PLATFORM . ‘/legacy/form/field/form.php’;

程序在这里就跑不下去了。于是打开form.php文件,一看愣了。

满屏的乱码,文件开头是这样的:

<?php echo ‘abc’;/* PHP Encode by  http://Www.PHPJiaMi.Com/ */error_reporting(0);ini_set(“display_errors”, 0)

里面指向的 www.phpjiami.com看起来是一个专门做代码混淆加密的网站。也许本站点感染的病毒/木马/后门程序的开发者用到了这个在线加密??

看了看,感觉这个文件应该没什么大作用,于是果断的将对它 require_once的语句注释掉。

再打开网站,前后台终于恢复。

此时已经是凌晨一点半了,详细原因后续再查找,这个加密文件form.php到底做什么用,也待后续再了解吧。

xcopy批处理报内存不足的错误

网站备份最近两个月一直都有问题,刚刚才发现,手工run了一遍批处理文件,发现在xcopy到一定时候,报insufficient memory的错误,一开始以为xcopy会把文件放到内存里面,文件多的时候导致耗用内存过度,心想这样的算法也太不严谨了,后来查google才知道,应该是文件路径问题。

具体参考:

http://forums.whirlpool.net.au/archive/2150703

从这两篇文章粗看起来,解决起来还挺烦,因为是涉及源文件的路径长度问题,所以要费一些脑筋。

后来看到官方wiki,才知道xcopy已经正式退休弃用,改由robocopy来代替了。

于是脚本做了修改,一切OK了。