PHP使用GD2库生成的图像无法输出的解决方法
前言
有时候我们可能随意的使用PHP跟GD库来创建一张图片,可能是用于展示验证码之类的。
官方代码如下:
Note: 此函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。
<?php
header ('Content-Type: image/png');
$im = @imagecreatetruecolor(120, 20)
or die('Cannot Initialize new GD image stream');
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);
imagepng($im);
imagedestroy($im);
?>
以上例程的输出类似于:
可能会遇到的坑
事情总是往往不如人意,在大大小小的项目,零零碎碎的代码中,总会遇到一些问题,造成用GD2库画图,图像无法显示等等。
bug1:未开启GD模块
找到你PHP的配置文件:php.ini,寻到这里行
;extension=php_gd2.dll
如果这行前面有分号,记得去掉,并重启相关服务。
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格式。
如何检验代码编码格式是否有带BOM呢?有一个简单的方法:
$url = 'http://xxx/xxx'
$s = file_get_contents($url);
echo bin2hex($s);
//输出结果:efbbbf89504e470d0a1a0a0000000d49484452000000c6000000c60103000000b3556d1e0000000......
如果结果前面是efbbbf
开头,就说明代码带有BOM 头。
这时就采用各种编辑器或者小工具,转换一下代码编码为不带BOM的就可以了。
bug3:受缓存影响
如果尝试多种方法无果,这时可以考虑使用ob_clean()了,清除一下缓存。
ob_clean这个函数的作用就是用来丢弃输出缓冲区中的内容,如果你的有许多生成的图片类文件,那么想要访问正确,就要经常清除缓冲区。例如:
public function create()
{
ob_clean();
$a = new verify();
session::set('captcha', strtolower($a->create(4, 15)));
view::assign("captcha", $a);
view::display("captcha");
exit(0);
}
希望以上能帮助大家填些坑~
标签: php
来了 :mad: