东方星雨

简单网络

一个爱好网络的80后男站长。

关注我东方星雨个人微信号:476847113

您现在的位置是:首页 > 站长日志

帝国cms 验证码不显示

2018-03-26 站长 站长日志

   首先来看下,在网上搜索出来的解决方案有如下几条:

  1、修改一下评论表单,然后重新提交就可以了这个方法我确实第一次试了,管用,但是后面就不行了,具体是为什么我在后面会讲

  2、空间不支持GD库,让服务商解决一下

  3、去掉<?php后面的空格,和?>前面的空格

  4、由编码引起的

  5、由BOM头引起的

  再运行,看下 /e/showkey/index.php 文件

  我们知道当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浪费了半天的时间。

  现在来说一下如何快速判断是什么原因不显示验证码

  1、GD库没有打开

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

  -------------------------

  <?php

  phpinfo();

  ?>

  -------------------------

  如果访问http://你的域名/e/showkey/index.php,显示的不是乱码,是红叉,那么直接跳到第二步

  2、批量去掉BOM头代码

  将以下代码保存为PHP文件并放置根目录下运行,则可以批量去掉BOM头

  -------------------------

  <?php

  if (isset($_GET['dir'])){ //设置文件目录

  $basedir=$_GET['dir'];

  }else{

  $basedir = '.';

  }

  $auto = 1;

  checkdir($basedir);

  function checkdir($basedir){

  if ($dh = opendir($basedir)) {

  while (($file = readdir($dh)) !== false) {

  if ($file != '.' && $file != '..'){

  if (!is_dir($basedir."/".$file)) {

  echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";

  }else{

  $dirname = $basedir."/".$file;

  checkdir($dirname);

  }

  }

  }

  closedir($dh);

  }

  }

  function checkBOM ($filename) {

  global $auto;

  $contents = file_get_contents($filename);

  $charset[1] = substr($contents, 0, 1);

  $charset[2] = substr($contents, 1, 1);

  $charset[3] = substr($contents, 2, 1);

  if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {

  if ($auto == 1) {

  $rest = substr($contents, 3);

  rewrite ($filename, $rest);

  return ("<font color=red>BOM found, automatically removed._<a href=http://www.yeetech.com>http://www.yeetech.com</a></font>");

  } else {

  return ("<font color=red>BOM found.</font>");

  }

  }

  else return ("BOM Not Found.");

  }

  function rewrite ($filename, $data) {

  $filenum = fopen($filename, "w");

  flock($filenum, LOCK_EX);

  fwrite($filenum, $data);

  fclose($filenum);

  }

  ?>

  -------------------

  运行之后,我们来看页面,如下

bom

  拉动,右侧滚动条,直至看到红色字样,则表示有的文件包含了bom,此时,我们把文件下载下来,然后用dw打开,存储为UTF-8编码,然后上传至服务器,重新运行 bom.php 在看测试结果,如果没有红色字样,那么此时,验证码应该可以正常显示了。

  站长提示:我们经常会改的文件有以下文件:

  config.php connect.php t_functions.php user.php等,修改完之后,注意把这些文件存储为utf-8模式,并取消bom签名!

文章评论