PHP 验证码图片无法正常显示


今天学习PHP  验证码的制作, 遇到一个问题, 这个问题让我纠结老久!中途的郁闷情况, 感觉让自己快吐血三升。笔者先按照老师给出的代码写好了之后, 在检查GD 已经开启的同时, 运行结果是我的图片怎么也无法显示。在同学电脑上测试, 在自己电脑上面反复检查代码, 这样持续了1 个多小时, 但是问题依然没有解决!


当我从网上摘抄一段验证码代码时, 新建一个PHP 文件, 将此代码贴上, 运行结果无误。 说明我的GD 没有问题, 那么一定是我的代码问题了, 可是同样一段代码, 讲课的老师能运行, 完全没问题, 为什么到了我这就出问题了呢。现在我将这段代码分享给大家看一下, 待会在给大家说说我发现的问题, 以及我对这个问题的无语之处的抱怨!!这TMD 怎么能算是一个问题啊!!!




<?

header("Content-Type: image/jpeg");
for($i = 0; $i < 4; $i++)
{
	$random .= rand(0, 9);
}

$im = imagecreatetruecolor(100, 50);

$bg = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));

$co = imagecolorallocate($im, 43, 100, 0);
imagestring($im, 6, 10, 20, $random, $co);
imagejpeg($im);
imagedestroy($im);

?>

以上是我开始写的代码, 这段代码一直都没能够正常运行。运行过程中, 一直都是无法正常显示图片。呵呵, 想着我这代码无法运行的错误, 我现在还想抱怨,还想吐血。上面的代码没办法运行, 然后我在无意中稍微变化了一下,而且在我平时的认识中,这根本就不能算做变化的变化, 居然使得我的代码正常运行。下面这段代码是我正常运行的代码, 这里分享给大家。


<?

header("Content-Type: image/jpeg");
for($i = 0; $i < 4; $i++)
{
	$random .= rand(0, 9);
}

$im = imagecreatetruecolor(100, 50);

$bg = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));

$co = imagecolorallocate($im, 43, 100, 0);
imagestring($im, 6, 10, 20, $random, $co);
imagejpeg($im);
imagedestroy($im);

?>

这段代码, 跟上面的那段代码, 亲爱的读者朋友, 你能看出他们的差别来吗?

差异:

这两段代码, 所写的内容是完全相同的。 唯一的不同点是, 第一段代码在开始写代码前(在<? 的前面), 我加了几个换行。而第二段代码,我则没有加换行。就这几个换行, 导致了PHP GD 生成图片无法正常显示。以前编写程序的时候, 都从来没有想过, 正常空格, 换行会给代码的运行带来这样的问题。 而且, 在“编译原理” 这门课上,我学习到的是,“词法分析中, 最好是在token 与token 之间用一个空格符来进行分隔, 这样编译器在进行扫描的时候,会大大提高扫描速度” 。然而, 今天这样的情况(因为几个换行符)使得整个程序没法正常运行, 确实超出我的认知范围。目前, 我还是第一次因为换行符, 把自己给难倒在编程道路上。后来, 经过测试,我发现,只要在 <? 前面添加了内容, 那么图片都没法显示。但是在 ?> 后面添加内容是不会影响到程序的运行的。


所以, 在PHP GD 图片程序中, 代码一定要顶行写, 这样才能正常运行。 这是我目前能找出的解决办法。虽然, 问题是解决了, 但是, 心里还是在纠结啊!我的个神啊!! 怎么能有这样的荒唐情况, 难道这个PHP 的编译器就这样的为难我们的程序员吗!!(虽然鄙人写代码写得很少, 错误也经常的出现, 但是这个错误绝对是最憋屈的一次‘错误’)


同时, 我发现一个有意思的问题, 在写这篇文章的时候, 我还没能发现这个问题的原因, 所以, 我也没有像出解决的办法, 不过我想把这个问题先通过笔记的方式留下来,以免以后忘记, 当解决后, 在与大家分享这个问题的原因。

状况:

       因为我使用的是极速版浏览器(世界之窗极速版)。这个浏览器有两种内核处理器(一种是默认的谷歌极速模式, 另一种是IE 兼容模式)。同一段代码在这两种模式上运行, 当会得到不一样的结果, 这应该就是所谓的浏览器兼容性问题。具体问题是什么样的呢, 我也不好说, 这里上传两张运行截图:

极速模式:



兼容模式:



以上两张照片的区别是, 极速模式, 是在浏览器的顶端开始显示图片, 而IE 兼容模式, 则是在里浏览器顶端一段距离开始显示, 而根据程序的要求,正常的情况, 应该是IE 兼容模式这样的情况。




  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值