关于帝国CMS验证码不显示的解决方法

 2019-03-19 查看原文  1     

最近做一个站,本地测试的好好的,验证码什么的都显示的非常正常,上传到服务器后,发现一个是普通新闻图片显示不了了。再一个就是验证码显示不了了。真是见鬼了y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

普通新闻图片显示不了还好解释,因为本地建立的虚拟目录带了目录名,所以上传到服务器根目录后自然路径就不对了,使用帝国批量替换模板字符后部分图片回来了,但是还有部分图片没有显示,估计应该是在数据库里了,到数据库里替换相应的路径就好了y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

 y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

图片都顺利的显示出来了,正当我暗爽的时候,发现留言本的验证码是一个大红叉,开始因为是路径的问题,找了半天发现显示验证码的功能页面里面没有涉及到路径,于是打开百度和google查了一下,在查找的过程中发现,google查询的准确率确实比百度要高,不过大家都用习惯了百度,所以一开始就是百度,在这里提醒大家的是,如果百度搜索不到的内容换google试试,说不定就可以了。y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

 y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

在网上搜索出来的解决方案有如下几条:y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

1、修改一下评论表单,然后重新提交就可以了y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

   这个方法我确实第一次试了,管用,但是后面就不行了,具体是为什么我在后面会讲y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

2、空间不支持GD库,让服务商解决一下y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

3、去掉<?php后面的空格,和?>前面的空格y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

4、由编码引起的y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

5、由BOM头引起的y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

 y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

以上基本上全部都尝试了,最开始修改评论表单后重新提交,确实验证码显示出来了,后来修改了一部分东西,更新缓存后验证码又不显示了,真是很郁闷y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

然后把以上每一条都试了一遍还是不行,于是就打开源码进行跟踪,打开/e/showkey/index.php放到本地调试,发现原来在本地可以显示的现在都不显示了,看来不是服务器的问题,然后把服务器上所有的文件都下载下来从/e/showkey/index.php开始调试,最后发现将/e/showkey/index.php里的include("../class/connect.php");行注释掉后,把相应的调用的函数也注释掉,发现图片显示出来了。y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

 y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

难道是"../class/connect.php"里面有什么问题?进去看,发现也没有什么特别的东西,/e/showkey/index.php只调用了"../class/connect.php"里面的ecmsSetShowKey($vname,$key);函数,没有什么特别的,是不是其他的页面出了问题?y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

 y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

我们知道当A页面include B页面的时候,A页面可以直接使用B页面里面的函数和变量,当B页面include C页面的时候,A页面即使没有include C页面,但是include B页面,也同样能在A页面中使用C页面里的函数和变量,发现connect.php页面引用了config.php,用NotePad++打开e/class/config.php页面,发现config.php页面并不是无BOM的UTF-8编码格式,而是带了BOM的,忽然想到,之前使用了记事本打开并修改过参数的,就是这个时候记事本默认添加了BOM头,使用NotePad++将config.php将其转换成无BOM的文件然后上传,刷新一下,OK!验证码出来了!真是一个小BOM浪费了半天的时间。y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

 y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

现在来说一下如何快速判断是什么原因不显示验证码y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

1、GD库没有打开y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

   一般的虚拟主机都会将GD库打开的,如果GD库没有打开,那么访问http://yournam/e/showkey/index.php就会出现一堆乱码,可以告知空间提供商让他们帮助开启,如果是自己的主机,那么打开php.ini找到extension=php_gd2.dll将前面的“;”号去掉,重启APACHE或IIS就可以,以前的PHP版本是extension=php_gd.dll。或者你可以将以下代码另存为php文件传到你空间里,如果有GD标题就说明开启了GD库y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

-------------------------y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

<?phpy1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

 phpinfo(); y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

?>y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

-------------------------y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

2、批量去掉BOM头代码y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

将以下代码保存为PHP文件并放置根目录下运行,则可以批量去掉BOM头y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

-------------------------y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

<?phpy1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

if (isset($_GET['dir'])){ //设置文件目录y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

$basedir=$_GET['dir'];y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

}else{y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

$basedir = '.';y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

}y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

$auto = 1;y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

checkdir($basedir);y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

function checkdir($basedir){y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

if ($dh = opendir($basedir)) {y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

  while (($file = readdir($dh)) !== false) {y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

   if ($file != '.' && $file != '..'){y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

    if (!is_dir($basedir."/".$file)) {y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

 y1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站

     echo "filey1p上海网站建站_上海网站制作_上海网站设计_TOPSSEO企业网站建站