我在应用程序中使用此Kohana Captcha module。图像在我的本地环境中正确呈现,但在我们的开发环境中,它返回以下内容:
�PNG
IHDR 2 1îµM JIDATxÕ|il¤ÉyÞSUßÙýõÅr8$ç¾8«Ñ=¼YÁ¶àݵ9 È°£ÀH #üÌß $@¤ÀFäì$¬X²VÒÚÒjiµëÕÜË!Co²}~gùÑMvl»I$¿`_W}u
¤YZúHPÝ©²Vq×ÝG4øÅ5tªëÕÏN%*v6óB^ï¢kT×A (Å]ïç²m¶Þ^HåsáEÜã\Hµïq5 ni©#)Bé£ûÄ»¥àåsýí5
ª±êgáùØelCóBQý,#¡¤b¦ @QãÚN¶¦o¾pµâEBÚºfk©1ÒlFIÜ qCÀ¥ô¢ªM4µÍFLO¤@Éæo:&ïv¤T~Áoo´C"jè±êÌMánoÌj(*.¥ôqS¿SàB*ð0¥1[×l]3Xsö`:u])¢¥¸heÜFÜHö' !g¹¼Vvs} ÒE§ÛQ~ñ"Ñѵê4M¢ßDxî¤F!?[c¨î^(ä6ÁèEÂ0BlÙºfiLk&í`2f2¤R^ÄC!wZS
¦c¤ Ù<d>xÅ@$ûÍúD¯#¥
J{0Áa3êBñ½:Ô©]ÕYÖÀ»
C®T)à¥Ð)Ý6cbi¥iËJùp£Èço=RÐL]mj¥ËåF é|$z£ìK¤
Êa»kÞ1ÓT ÀýÀ0Xë};a#BBüH§t0tcJHÌÐb Ò¸ s© )ÒjÄ2¶Rª¸TòÛ¹Ê]÷èq½$ûùbXyì(FÁhuwdÈlÇ!#DßRð¢ö$µ©±sSª© ¥ ÓH¨*N*¾KËe(^´Tts!ÄéjrX!éäú\!r[RKû&ªëªZÑn&è®ôØ Ô(áBVuµmRÚ¶snE?,xaUÒÚFs£¶ª8뼸\~ôHå5Ä;cM¾#$}$µþ0ym(§ö ¤vÒ! PñDÌjIº~KÖÝþÈçrv½¢SjÕ.¦ÆvBè˺â4µuÍÖ©±mpjmWZ© w4ALÏ"ÿ± Hj$e}ZAñ±â·I¡¡·«Ý¸lÇ SÂÈvòÆó`jÌÖYÌÐÆiB ÅåâÜù¡4=ÊÍxpø(Ò¯KÉ-'ýÑ(¶a÷Çá56R¼ê, ðê¡?Ú5\£6\R[×Ú@a±;míüPJåfó<h>
g(Çz-3m0*©¢¯,ûù»%wEÔ!TÛm'âv+^kÓ `I@
CxÑM²§qòÖ-cXö&ÖlZ¡Pø~ _(ÀN6A2Jeg
"Ü{û´K9éÌñDj4ÎÌÝiUο·:ÿjpa7©ìnG±Eü¨¡S]#¤v,¥`LµÙûåLJ±Åß6s51G[tKª¤í;N/B±ó+¦±ÎátöA^DMtÝm¦;ô Ç°7CêJªÊ²_YôÜ%_D2ë53'FB`wÇ_x®ëö{P©4ve»*ÚciUɹ3¦ÏLóÃ:ýÝ?|/ôµw{fïv¯Í§mgIoi[Æ6,;ô}!UÀUë¸ì«{XÌ%¢H5Úq4½ö /y}[©N^ø·ãVf{ûo¬\Ëçï¢J³ßóÌñ/I¦ ĺËtrâOg¾5¿'ÁLÆ"/hÍvCÁA}¤DÆMwW ô.ÿ{^E_îê_î
}o:5·²¥±3ç.d^!Ðm5F¬áµ¢|±
Ù[ÂáhÕç÷¿»¸|u]Í'^Yô¾µbuZÉá8 BIçTá~Ù]nQÎÿý+g_¦ëìÓß¡Fä"äJ*îJaKÉÅ]ÉããóGO.LwÌLô±ÈIÂðéùsO:0ºd9~L&¢`2â/x¡ÏÛ°lÙé³W®í8P (£¦cºù`óX-¾üÅrfRï8]ÚùhõzáQc(ä&\ÍféQ !¤{àÌkOÿôkYZ*h¶Ùy¼ô¥óO:Ý)Ý6Eñ×#"Bet øÙWÜß<y>c:'='íö]ö/8©
eÒ¯^)°V ÚJHnRv¦pü³]BQÇj&ëåÚ¦äî6ÛdN8{NC
y÷[óÉxfÔ Çõ_¼ñ¦[¤ÓÜÀËÃrPÏÎrÉý Þ|î_¼:ðÄ(Ð
ë¹láájq!§cr¿v
ÓÄÀhNIÌ~Ú]]]a-~cmdòÆyÊÄÀÈòÈèúÈ°``ty`t
ë+ÎÂl"®-¤ÚèÔr!ÓpåÌç^tFⶣ¯,ÛäÓ¨7ܼßSPäc¿Õ_McIÝþNÔÃcËd÷b JcÅiwð.B@CöâٰتïNÊHd§$Kr(X©øÑgOpsåüûïDAëJôÿü¥®GôêÄ|Û; Hvº#çkñ?i|¦Å\¢²8¸4ytéAW¶(Uf,%ÂÎÅÓW>=ûôL¦·TÌÆÜòÞe ìôÁ ì4¾øÞ¡QiÄ ¢XRKsM¬ ¦S#¦»ëuKFjàN3© ø·¤RT×ÂOÅ{j/ñµÅ§ê¯WrSKÃ×NSßÅáîSG ¬|2·xí»R(>¾¯ÚÑLõá*Æ÷F&¯÷K¾]ÅDAQ_Ú¡D¾<k>¼]¨KÁõ·VB¯jPª>©r #¦wK5¾u°ÍÓª%pAvíN
%¹R
³o¯Õú(ÒÿdmýK멾l}z¥:R\2CÏÏ®}¿?ôõ¦Ï5J¹ø߯øf,¸òÚíu Ró HAÞý3óS±O]ØÓoüÆ;W£ÿùõñ§ºA¬.³¡aÉîÕ·§¤®3:F'óÕ'Áx%Yð¤Õ(~NJrA©ý¤Ä¡Ým'ìâìþ«x2ÃÝÕ¹«Õà~¤k¤vÜS Ô0øaÇklU×ØÕ_|òó÷LP,Q^YÿÁ7ìjñUmCH(ýµÔùËοúÄ#IB(¡|ìTÙBÇpmEB´ÅNv¬N΢î'¬Z. pQu]'kØJdN§3ûÐÎÄT@ä¥Å|} /b¶1ÿÑTq!¯oÏQk,AaäÜòÅÏÍZ{»Ð¼µÄ_þËÈÏMÒ2B ÈÑR6]}ú¾ÜËFÿãk+¿ä$S©ù§·]¥Ðp ¬
ZÑ¿Ý{³F÷±9¯Eë¯s-£ 1ª
Ñl=oÜd×D$γ^
B 1䵯Àtf¤&EsÓ+Ã)B Z ¥!j·è/Ý>½Úøpr"ùÆæQ¥ØäÂ{ HðÌK©'I¼õÝÜĹaYÚSÏg¥@W¢æHæÜø@,¦×GM1RB¬¤¡+A8hOÖüÉ`Ò[×+Õ?bÂý0«4_?VZgUöÛ)E«+¥zm[RÜ
3þÒ':z´
·?ÅÎý¿ÓY.ÿþ*e ض><fw> ¢HÞørçF^)Dàå¨RÒÃNL7^}#ÑŤß'L>âÉZØ1Ô^:ø±>Ó|¾
"^¶®IA5tÑ~§ê\¨Ç¬ÍJ0pyØån½Gó_úʽQF¡öî?½×+Õä>^¸-ÌÝ$´zúbìåW3ï|?ëj?¥$Ó Á¥gjáënÒ¨åÀ¢HDaÕ
'"TÙJjØIÚö&B@©iTËæ²^Êz)moY6ëÊ©DÀe·-¹3tÉ¥Ú½R¯ÉÊM=Ñ ¹XÍVf±f¡8ÜrásO?|ùwnÚA/6dsq=ñ£7*P0BÁ*m1gJ~=ýp:ª9æÛÖ¤;µá1RêÁ-©¤T¾·=Kù2?Sé>éÐôzMÛE\
¢!¡Ë¢)u3ÒAeV~" züôn(ʨÎpA¾6"³î+Å̱îj¢0¿^ͨhA7²wRHîfA¡òÅ/Þyâ(PQsØ>è{ï¯.G Jµ¯:9Ú¤À7þxùòç¿û}ïWRZ_U Â¥§jleþ~TZa¸É|Ûô"÷ö3KFmk¤P³®;ôд
Ø °t*Z{·®!v[O¼ÏP@~Ƶ"ÙfTÙµ2uÖavjE)hA6}%TT9L/¯}õêàñ *,(àÆG'¯}p¶ÚKTK÷aõ¿,iRAüøü{U2þê?è øàÍR ¬ÀR@TÅ/qÔ`F¨É(¦ ¥û0´t ÄFúBlõ:»1bf,FT PtåF©Á!ZÌj;F6 ^Õba5ý'¹äîaâ×}¤ðÛðQ²£¦G(·yDßûáåÉ#m*T
I5½sf
õ²¢GPªÛûÞX;mæ9çó¯g4 Xfîr÷-ÛÜß°$³º![rîÞ|Ä$ÏXdëIÜy*©F®t D¬Ü)¹Ùâf"d d»ªë.,A7ðÄáÊÏÓ~ý]×úùv×2ïû|!GWV
TBî?´îÚ&cUÀä7õ©÷ÿ²_ס J¥(æraoEQ*#q ~hÜù
P.ì>Ãt4¯!r½szÃ/wU#« n}sFDj[#A0Ë ~¸;¦;¡)B*Ùrà ßøö¨_xêó÷ÍNtßùöa a±Búkm½é}».MPLÀh¨uÅÊ祹ðõX|Ào¾ï¯Î7Y`øfCVÓÏGV®ó¨SÐÜ
²ÜìÒ À'c?.V׳dä·MÏé7/ýþPõóä÷VVoh¶Awd+)£4n)¡dÄ¥JV}!B¨ÆzNTSëÖ ¹ä^pµÂ¦½úÕGÎn 0}ôëo\èOiOâj@È?ëÒZOиÃV" yÎ ¥üwKï¿Uzçç_ê¼ô¼õæUv÷7P\Í=ËC :&6Göæ£@æ½êz,ï1ÿW'tX¾^¼ú'3ÕRiÞ¤jî׺"ÌFnxÌtö¾ôÏ>ÊôÔó-ö§ôÞb½Ún´7M£©þ_ÎÖÅÃû~w¯!Cqõý²RBõ£7×zSMïÍ b¦g«åB1 ~)5*#ºsaz¼Vj
©±¸ûó¶³R:¥Þû7SÞ¡34fj»ÝE ÙáN Pjéæ\+vÓñ¥ßúýkUgqÝúÖ\^I°¶s¿Ë;u)ùà?ÿ»¥gíÏ^qRêÚßw^Ê£ÈL(,\jAøÅUàR«OÓlr5SíM>:ó¥¾®Ó %Õíÿ½xãÍÓ°#Û°TRMþøÓc]#Ïg:%J)©2Ǻx$ÜlsùÑ.]yõîç¾p4pýÜTæÏÿø²[2èt{å¶T¨
£^þ½G·p£±,HJ¤:ñìËÉá1óç?+ðv©Rª[½é(RØ_ ÝK÷Å ¤y'wóOsC % µ¥ªµ$ÈutuwïîëÎÏåßýú[-¾¶)é&í«×N^Zn|xíÝ¡ïó¼µuebzoj{ÞäÌÚ~¸¼øk¿÷¯)%£7>q]ιʰg^J8gÿǽØxê(>¿* @çè¶N¿ÞÛq|K0TÙ{¹÷ó3ïäJ«ÈZ3µ^"øô³cg²
NÞü_ç~þöpcÁÛÙQë¼V×Jrcö(ÖuÖØ@Å7ªTëòß*¼ùÿ
JmyÃr¾ Ìö;3«c|»ïDÊNÔðÖ¼¿p3?óaÎ_ßÜÜÃW6%*
¨¦×ØàØzàê÷owûnn6f°£T DÆ'ª¾löÔ[Üpßß.µwgfº¶Ç^éR
ÑtÊRX^Ü¥0ðdà
/÷Øn»")ò¾öÓÄðéìñ+cçW:zÝÏÎ_xv^IÌO§§nöÌÝ9B|gÛ®H©Ü@ ¿2ûÂk÷ÞÿþèþïÙvßBJë*h(Ú%µ:üÊ÷¯Ï¬Ü.ñK]u¥« #Æ4E¿«e'±©=S7{ dz*Ç/¬¿¸Ëk¿±Â×»¦3ó÷ÓÒQÀº!3v~ÀOºænJªáQ°átvüÓò]§%7=PSRÖÎåèa·~Ùt1½Qè¬~Î-Ç?\ùð¯G&Fή¿¸rñI%ùè¹ÕÑs«JµEgþ~úÆMSe-Û åyD§?é|¼r¾ëýÕsµßSªýy
ÀDÓQ 무Ä3¦n1 bã¡n5¹øó+Hã©,.&³×7P¬Ø½ë½S7z§ûd78?2ï,v)u)ùÍùRfãâÁÎvK.ªÔ²iãs
¿6Të 8EÈD+Ù;M£U_òºUC?µT£¿ú§²Ü" Ûd 9ûNξóQ¿¦É¾áÂÀh.}n9Ýí9é À½=û[é1R%6ïO©]ÜM¿ÚN" `[µixHr_0R²
ÍúË¢ëùÎñtvóóαeyDç&3·o$þkoWùÄøòñ{×zö·Ò=¸sÅ6¢²¹IçhÛ (3Oò(qÊ a2ÉÆËçáøW®w§³Mñ3¤cË>W
«ÎêóÓïí{è= #ilz£Íjýѽâ®
x @Ó¨®oR@5¤½bô·B ×Ö;)irM_gÄÐèÎE¼Ã9{@(¸Õ ¥DðöÆd"P¤ÉÒ*~ËÚ:ªÓh#o ¸ríÿ¾Ì/ú2VÂb@TQöyõG+l£EryS#íæ"i¡³0ØîÞäê fëlQuN5ä}
˾ÚÏ_ÅFq,ͱ´Þ åBgMtÍa± ZÐó8c¥ PJijó7Ô¾ fn
BP-clìËtë47^©Üû·E04¢mMDè¤l
hb0ÁÔHÿUtéLU IEND®B`
这是render()方法:
public function render($html = TRUE)
{
// Creates $this->image
$this->image_create(Captcha::$config['background']);
// Add a random gradient
if (empty(Captcha::$config['background']))
{
$color1 = imagecolorallocate($this->image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(150, 255));
$color2 = imagecolorallocate($this->image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(150, 255));
$this->image_gradient($color1, $color2);
}
// Add a few random lines
for ($i = 0, $count = mt_rand(5, Captcha::$config['complexity'] * 4); $i < $count; $i++)
{
$color = imagecolorallocatealpha($this->image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(100, 255), mt_rand(50, 120));
imageline($this->image, mt_rand(0, Captcha::$config['width']), 0, mt_rand(0, Captcha::$config['width']), Captcha::$config['height'], $color);
}
// Calculate character font-size and spacing
$default_size = min(Captcha::$config['width'], Captcha::$config['height'] * 2) / (utf8::strlen($this->response) + 1);
$spacing = (int) (Captcha::$config['width'] * 0.9 / utf8::strlen($this->response));
// Draw each Captcha character with varying attributes
for ($i = 0, $strlen = utf8::strlen($this->response); $i < $strlen; $i++)
{
// Use different fonts if available
$font = Captcha::$config['fontpath'].Captcha::$config['fonts'][array_rand(Captcha::$config['fonts'])];
// Allocate random color, size and rotation attributes to text
$color = imagecolorallocate($this->image, mt_rand(0, 150), mt_rand(0, 150), mt_rand(0, 150));
$angle = mt_rand(-40, 20);
// Scale the character size on image height
$size = $default_size / 10 * mt_rand(8, 12);
$box = imageftbbox($size, $angle, $font, utf8::substr($this->response, $i, 1));
// Calculate character starting coordinates
$x = $spacing / 4 + $i * $spacing;
$y = Captcha::$config['height'] / 2 + ($box[2] - $box[5]) / 4;
// Write text character to image
imagefttext($this->image, $size, $angle, $x, $y, $color, $font, utf8::substr($this->response, $i, 1));
}
// Output
return $this->image_render($html);
}
和image_render()
/**
* Returns the img html element or outputs the image to the browser.
*
* @param boolean $html Output as HTML
* @return mixed HTML, string or void
*/
public function image_render($html)
{
// Output html element
if ($html === TRUE)
return '<img src="'.url::site('captcha/'.Captcha::$config['group']).'" width="'.Captcha::$config['width'].'" height="'.Captcha::$config['height'].'" alt="Captcha" class="captcha" />';
// Send the correct HTTP header
Request::current()->headers('Content-Type', 'image/'.$this->image_type)
->headers('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0')
->headers('Pragma', 'no-cache')
->headers('Connection', 'close');
// Pick the correct output function
$function = 'image'.$this->image_type;
$function($this->image);
// Free up resources
imagedestroy($this->image);
}
在开发环境中启用了GD库。这两个环境都使用apache 2.2,php 5.4。我需要启用另一个服务器设置吗?
答案 0 :(得分:0)
这种类型的错误有时会让我感到烦恼,请尝试添加: 模具();
在最后一行之后: 返回$ this-&gt; image_render($ html);
有时它对我有用。
答案 1 :(得分:0)
文本看起来像PNG数据流,只能由文本编辑器而不是图像查看器呈现。