解决PHP生成验证码时“图像因其本身有错无法显示”的错误

前段时间在iis7服务器中部署用php做的网站时,发现验证码显示不出来,报500错误!可是我在本地还能好好地显示,百思不得其解,于是做了个测试,打印了一下phpinfo(),发现竟然没有出现gd库信息!!!于是果断打开php.ini,查找了extension=php_gd2.dll,发现我gd库已经开了(把extension=php_gd2.dll前面的 ; 去掉),这就奇怪了,是不是我的扩展模板文件夹中本来就没有这个模块,于是又跑到ext文件夹中找php_gd2.dll,发现确实有存在啊!!!于是找了度娘,各种测试,其中有人说可能是php_gd2.dll版本与电脑系统不兼容,建议换一个版本的php_gd2.dll。于是我看了服务器的系统信息,window 64位,于是又重新下载了个win x64位的php安装包(下载地址),然后找到php_gd2.dll,直接替换掉了原来版本的php_gd2.dll,然后再一次打印phpinfo()时,gd库信息出现了!!!激动的心颤抖的手,赶紧去试一下网站页面的验证码出来了没,一打开,tm又显示失败!!!打开firebug看了一下是404错误!说明服务器那边的配置已经没问题了,可是为什么是报404问题呢,索性查看了request请求头信息和response响应头信息,发现请求文件的格式是png(这个没问题,因为我问在输出验证码时设置了一个header("content-type:image/png");头信息),但返回的信息格式竟然是text格式,这又是什么梗!!!一脸懵逼!后来继续百度,看到了一篇博客(点击打开链接),他说Header("Content-type: image/PNG");这句代码前使用ob_clean()清除输出 ,试了一下果然成功了!!!

// 输出
ob_clean();
header("Content-type: image/png");
imagepng($im);

总结一下:

验证码显示失败的解决方向:

①:确保你的php_gd2.dll模块存在ext文件夹中,确保你的gd库已经开启,检测是否开启,找到php.ini文件并搜索extension=php_gd2.dll,

       确保前面的;已去掉

②:第一步确保没问题后,还不行的话,换个版本的php_gd2.dll看看,最后是符合你电脑系统的

③:试了以上两步还不行的话,就按上面的来Header("Content-type: image/PNG");这句代码前使用ob_clean()清除输出

④:再不行的话,好好看看你的代码吧,





你可能感兴趣的:(PHP)