首先来看下,在网上搜索出来的解决方案有如下几条:
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,此时,我们把文件下载下来,然后用dw打开,存储为UTF-8编码,然后上传至服务器,重新运行 bom.php 在看测试结果,如果没有红色字样,那么此时,验证码应该可以正常显示了。
站长提示:我们经常会改的文件有以下文件:
config.php connect.php t_functions.php user.php等,修改完之后,注意把这些文件存储为utf-8模式,并取消bom签名!
新闻热点
疑难解答