最近把单位网站的服务器从linux虚拟主机搬迁到了windows2003+IIS+PHP的云服务器上,因为已经对网站用的DEDECMS做了很多的二次开发,因此没选用官方的织梦网站搬家方式,而是直接备份导出了数据库,去服务器上恢复了数据库,然后将网站源文件都传到服务器上,通过修改DEDECMS数据库配置文件的方法完成了网站搬家,不知道怎么修改DEDECMS数据库配置文件的童鞋们可以参看这篇文章:DEDECMS数据库配置文件在哪?怎么修改DEDECMS数据库配置信息?。
结果刚一打开后台就发现验证码显示错误,如图:
网上百度了一下,一般认为是服务器文件权限问题或者是服务器环境问题,再就是/data/common.inc.php的编码有bom头问题,把这个文件改为无utf-8无bom头格式,问题还是没有解决。而网上大部分的解决办法就是通过修改/data/safe/inc_safe_config.php中的配置,然后去掉后台登陆验证码的限制,这样虽然可以解决问题,但有两个缺点:第一是使网站变得不安全,毕竟后台少了验证码,最简单的穷举就有很大的可能性暴力破解;第二就是凡事不求甚解,不去了解并解决根本上的原因,那么虽然这个问题解决了,但是还有可能导致其他问题啊,比如我在绕开验证码登陆后台后,就发现DEDECMS后台多图上传提示FILEID:X错误,X为数字。
因此下决心要解决问题,首先查看验证码文件路径,得到验证码生成文件路径/include/vdimgck.php,在浏览器上直接输入网址+这个路径打开这个文件同样提示错误,接下来检查服务器环境及文件夹权限,发现服务器已经开启GD库并且权限配置正常,如图:
这下真不知道问题出现在哪了,服务器正常,程序在以前的linux虚机上也正常运行,怎么会出现问题呢?想想还是不死心,还是怀疑服务器配置有问题,于是去官网下了个最新版的DEDECMS V5.7GBK安装包,开了个测试网站,结果验证码显示正常。
这就说明服务器环境及权限配置一定是正确的,那么一定是我在网站二次开发中改动了哪个文件导致出现该问题,然后首先用官网安装包中的/include/vdimgck.php文件替换了我网站中的文件,问题仍然存在。仔细看了下/include/vdimgck.php文件的代码,发现在开头中引用了另外三个文件,分别是:
require_once (dirname(__FILE__).'/common.inc.php');
require_once (DEDEDATA.'/safe/inc_safe_config.php');
require_once (DEDEDATA.'/config.cache.inc.php');
依次替这三个文件(注意第一个文件是数据库配置文件,替换后要将里面的配置改成正确的,可参考:DEDECMS数据库配置文件在哪?怎么修改DEDECMS数据库配置信息?),当替换完第二个文件后,发现问题解决,仔细对比了两个文件,如下图:
其中第一张图是我网站中的文件,第二张图是官方的文件,能看出区别吗?区别就是我网站的文件莫名其妙的就多出了很多空格行,就是这些空格行中的某一行不仅包含换行符,还包含了一个空格,就是这个空格导致了DEDE网站后台验证码不显示。
所以如果你的网站在搬家过程中出现了网站后台验证码不显示的问题,如果参照网上的答案没有解决,那么你可以尝试检查下这4个文件:/include/vdimgck.php、/data/common.inc.php、/data/safe/inc_safe_config.php、/data/config.cache.inc.php,然后用官网对应的文件替换一下试试。
就这样经过一个晚上的详细检查,成功发现了问题的根本原因,既解决了DEDE后台验证码不显示 DEDECMS网站搬家后台验证码显示错误的问题,又解决了DEDECMS后台多图上传提示FILEID:X错误的问题,同时又学到了知识,积累了经验。