必威体育Betway必威体育官网
当前位置:首页 > IT技术

Php图片验证码显示不出来的解决过程

时间:2019-09-02 20:12:12来源:IT技术作者:seo实验室小编阅读:58次「手机版」
 

验证码不显示

gd库写的验证码上传到服务器后显示不出来了

bug1

出现上面的情况,最基本的一个错误就是你很可能在php里面忘记安装gd模块了。

window环境下面只需要在php.ini文件里面找到

;extension=php_gd2.dll
把前面的分号去掉就可以了,重启apache后,你就可以在phpinfo()里面找到这个

如果是在ubuntu环境下面,你需要安装gd模块,命令是

sudo apt-get install php5-gd
安装好了以后,也可以看到上面的模块。

bug2

如果小伙伴经历上面的安装后,发现还是没有用,那么就可能是下面的问题了

你的代码很可能是使用了像editpuls或者notepad++这样的文本编辑器编辑的,那么他们的默认编码格式就是有BOM的utf-8。

UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支持UTF-16,UTF-32才加上的

BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器

中不显示,但是会产生输出,就像多了一个空行。

一般我用UTF-8无BOM格式

所以你需要将代码的编码格式改成无BOM格式。

清除bomtou代码,大家只要把它放在一个php文件中运行即可。如:http://127.0.0.1/1.php(只需运行一次)。

<?php 

/*清除rom*/

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); 

        } 

    } 

}//end while 

closedir($dh); 

}//end if($dh 

}//end function 

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.</font>"; 

}else{ 

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

}   

else return ("BOM Not Found."); 

}//end function 

function rewrite($filename, $data){ 

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

flock($filenum, LOCK_EX); 

fwrite($filenum, $data); 

fclose($filenum); 

}

?>

bug3

如果大家经历上面的两个步骤发现还是不起作用,那就要祭出杀手锏了。

使用ob_clean()了,清除一下缓存。

ob_clean这个函数的作用就是用来丢弃输出缓冲区中的内容,如果你的有许多生成的图片类文件,那么想要访问正确,就要经常清除缓冲区。

  1. public function create()

  2. {

  3. ob_clean();

  4. $a = new verify();

  5. session::set('captcha', strtolower($a->create(4, 15)));

  6. view::assign("captcha", $a);

  7. view::display("captcha");

  8. exit(0);

  9. }

现在,大家可以看到恢复正常了

注意:大家如果使用较高的php版本,那么不能使用未定义变量,否则会报notice错误,$new_number和$_SESSION['check_checks']在使用前必须用isset判断一下或者你用老代码的话在最开始处加上ERROR_reporting(E_ALL & ~E_NOTICE);屏蔽掉notice错误(不推荐),所以用isset()判断一下,来确保它被定义了。不然也有可能显示不出来验证码。

转载 https://blog.csdn.net/yeweiyang16/article/details/70992566

个人分类: php

相关阅读

phpStudy基本用法

闲扯 正文 更改目录 更改首页 更改端口号 DNS解析 参考资料 闲扯 第一次接触php,要先安装环境,包括Apache、mySQL和PHP;安

配置nginx,Apache支持pathinfo模式-什么是phpinfo模式

我也配置了很多次了,前面都快放弃了,最近在学习resuful框架写api,代码实现上没出现啥问题,倒是这个path_info的环境配置把我弄的

PHP中调用filesize后,无法取得文件的真实大小

在处理中,需要每隔一段时间看一下文件的大小。使用filesize后,最初取得的大小是正确的,后来就变的不正确了。一直是一个固定的值。调

滴滴车费8343元 打滴滴15分钟后显示天价打车费

A5创业网(公众号:iadmin5)6月5日讯,滴滴打车前段时间就曾被媒体爆料因为免密支付遭多收钱而被相关部门约谈整改,最近又被爆出滴滴车

LCD1602液晶显示屏的入门级应用(一)

嵌入式小白,今天用到1602,被CGRAM DDRAM CGROM搞得乱七八糟,特此记录一下,供大家参考。首先,1602液晶显示屏除了电源、地以外,有3个控制

分享到:

栏目导航

推荐阅读

热门阅读