关于生成图形验证码的问题

#1 woweibawang

   session_start();
   require_once('class.CreateImgCode.php');
   $image=new ValidationCode('80','20','4');
   $image->outImg();
   $_SESSION['validationcode']=$image->checkcode; //存储验证码到session中
?>

这个是生成一个图形验证码,验证码可以生成,但图形显示不了,,,
错误是
Warning: Cannot modify header information - headers already sent by (output started at F:\AppServ\www\code\class.CreateImgCode.php:98) in F:\AppServ\www\code\class.CreateImgCode.php on line 46
‰PNG IHDRP-JåpPLTEÿÿÿuGNˆmŒCzÑ“Ðý‹•Ëº˜6'Џ©†Uêé³sR-þ!)`¾/¨œÐª€ðµ€(„ ×ëhXEýÊdÿiP×IÓT“𗆨©Û‘,ôØE80¼å8ã‚Ò¯"y©}D@Ø< 'm96s§å/‘WÕÛ¡ô†‡¬¢Faó÷è¹s\õÐ0²³žS76ÀëÉ        ò%ŽF        C³Z«±        ü©S7ñè•DðåGŸÓë¹ ›çÝW'°œµ¶‚¾DN¦]–†ç^=pE¶{s“Z½{îryº¥f÷ܤ$¦Ï”:|úVÁÔ’^K-–t¶ y`mïKãîîȃeR«ÿ¦™Õø=‡µ+yr§µªpÝ)õÞ—ùœBã@þhY´±!tl3±â ¡Á„áùÑQ_N +ÒǶ5ORûÞ;2UQùI¿†        â+ìFzthÈŠz¬ñ]œŽô¡¡¼PZÑŒÃð`À3e²¾Z¤lrcb蜏Š61¼ºküÖ|Xª Y+æ´5‰œBVù@(ɨ¤¿é~KÛ£ƒ7ð7“»Ö~n+_8tuKZ([†ÌrÊú—²QwNàÏzß×eO÷ëT›/™¨ì3Z-¡ áÌXó§´BìX¨yÒÜÒø2¬fÐ/ ¹–Ó5ݬúòÇdB$H'³ynÕ¾ÆQ…ÓZePõ!HÎâ]ÊäGâ0©“ôB2ÐÛdgC<»4yZf +AÒùÌ-µID zo«.¿3Ý+3+&IDATxœc`¤2``d *Àc '†È        ÒLb/,JtÐ!s¢±ØG„Íg!Ÿ¼^Fû0Í2âs@áÙð!\ˆÌ8¡w!{@¦ÁLdÀ0°»ãÒq2KÕD§Ê¡Î€ªfÜAˆn È4¸‰¹Pa²í@Ò Ý´/CÌ‚*0BHU˜²õìØÃÝ}H.œ†"Â]HÀ¼"¨QÂÉÀ4‹3g ‘ÄÀ†âwZæcs!Â@0Vd؉Ç<ä0Lìâ Ød`hE×NÖˆ¤70)šqºH€žl$É

求高手指点下,上网找了半天了,没搞定。。。谢谢

2010-05-25 21:24:27

#2 woweibawang

补充:验证码类中有这个方法:
private function outFileHeader()   
{   
  header ("Content-type: image/png");   
}   
/**  没搞清楚这个是什么意思、、、、

2010-05-25 21:28:34

#3 qiudong26

有没有加载gd库?php.ini里面那个gd库的注释有没有去掉?

2010-05-25 21:36:44

#4 jake的马甲

session_start();
require_once('class.CreateImgCode.php');
ob_end_clean();
$image=new ValidationCode('80','20','4');
$image->outImg();
$_SESSION['validationcode']=$image->checkcode; //存储验证码到session中
// 如果再不行,那么就在这里加个exit();

------------------

另外,你直接网址访问那个PHP文件是看不到图片的,要用img src来显示。

2010-05-25 21:41:11

#5 woweibawang

用phpinfo()可以看到gd启用了。。。
jake提到的方法好像也不行。。。

2010-05-25 22:05:17

#6 jake

这里主要的问题是header函数和session_start之间有冲突,提示头部已经发送了。

所以可以调整调整session_start的位置来设置到头部发送的正确。

2010-05-25 22:27:12

#7 redguan

用session存储二级制数据,先用base64 一下再存会不会好点?

session_start();
这句永远要在最前边。

不放在最前边,要保证上边没有任何输出。包括INCLUDE和REQUIRE 文件也不能有输出。

2010-05-27 09:57:34

#8 redguan

UTF-8格式的文件一定要去BOM

2010-05-27 09:57:54