Captcha使用PHP& amp;渲染为破碎的文本而不是图像。 GD

时间:2014-03-18 15:18:15

标签: php apache png gd

我在应用程序中使用此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û&amp;ªëªZÑn&amp;è®ôØ Ô(áBVuµmRÚ¶snE?,xaUÒÚFs£¶ª8뼸\~ôHå5Ä;cM¾#$}$µþ0ym(§ö ¤vÒ! PñDÌjIº~KÖÝþÈçrv½¢SjÕ.¦ÆvBè˺â4µuÍÖ©±mpjmWZ© w4AL­Ï&quot;ÿ± 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ö&amp;ÖlZ¡Pø~ _(ÀN6A2Jeg
&quot;Ü{û´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Æ&quot;/hÍvCÁA}¤DÆMwW ô.ÿ{^E_îê_î
}­o:5·²¥±3ç.d^!Ðm5F¬áµ¢|±
Ù[ÂáhÕç÷¿»¸|u]Í'^Yô¾µbuZÉá8 BIçTá~Ù]nQÎÿý+g_¦ëìÓß¡Fä&quot;äJ*îJaKÉÅ]ÉããóGO­.LwÌLô±ÈIÂðéùsO:0ºd9~L&amp;¢`2â/x¡ÏÛ°lÙé³W®í8P (£¦cºù`óX-¾üÅrfRï8]ÚùhõzáQc(ä&amp;\ÍféQ !¤{àÌkOÿôkYZ*h¶Ùy¼ô¥óO:Ý)Ý6Eñ×#&quot;Bet øÙWÜß<y>c:'='íö]ö/8©
eÒ¯^)°V ÚJHnRv¦pü³]BQÇj&amp;ëåÚ¦äî6ÛdN8{NC
y÷[óÉxfÔ Çõ_¼ñ¦[¤ÓÜÀËÃrPÏÎrÉý Þ|î_¼:ðÄ(Ð
ë¹láájq!§cr¿v
ÓÄÀhNIÌ~Ú]]]a-~cmdòÆyÊÄÀÈòÈèúÈ°``ty`t
ë+ÎÂl&quot;®-¤ÚèÔ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&gt;=ûôL¦·TÌÆÜòÞe ìôÁ ì4¾øÞ¡QiÄ ¢XRKsM¬ ¦S#¦»ëuKFjàN3© ø·¤RT×ÂOÅ{­j/ñµÅ§ê¯WrSKÃ×NSßÅáîSG ¬|2·xí»R(&gt;¾¯ÚÑLõá*Æ÷F&amp;¯÷K¾]ÅDAQ_Ú¡D¾<k>¼]¨KÁõ·VB¯jPª&gt;©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¤&amp;EsÓ+Ã)B Z ¥!j·è/Ý&gt;½Úøpr&quot;ùÆæQ¥ØäÂ{ HðÌK©'I¼õÝÜĹaYÚSÏg¥@W¢æHæÜø@,¦×GM1RB¬¤¡+A8hOÖüÉ`Ò[×+Õ?bÂý0«4_?VZgUöÛ)E«+¥zm[RÜ
3þÒ':z´
·?ÅÎý¿ÓY.ÿþ*e  ض&gt;<fw> ¢HÞørçF^)Dàå¨RÒÃNL7^}#ÑŤß'L&gt;âÉZØ1Ô^:ø±&gt;Ó|¾
&quot;^¶®IA5tÑ~§ê\¨Ç¬ÍJ0pyØån½Gó_úʽQF¡öî?½×+Õä&gt;^¸-ÌÝ$´zúbìåW3ï|?ëj?¥$Ó  Á¥gjáënÒ¨åÀ¢HDaÕ
'&quot;TÙJjØIÚö&amp;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é&gt;éÐôzMÛE\
¢!¡Ë¢)u3ÒAeV~&quot; züôn(ʨÎpA¾6&quot;³î­+Å̱îj¢0¿^ͨhA7²wRHîfA¡òÅ/Þyâ(PQsØ&gt;è{ï¯.G Jµ¯­:9Ú¤À7þxùòç¿û}ïWRZ_U Â¥§jleþ~TZa¸É|Ûô&quot;÷ö3KFmk¤P³®;ôд
Ø °t*Z{·®!v[O¼ÏP@~Æ­µ&quot;Ù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&quot;d d»ªë.,A7ðÄáÊÏÓ~ý]×úùv×2ïû|!GWV
TBî?´îÚ&amp;cUÀä7õ©÷ÿ²_ס J¥(æraoEQ*#q ~hÜù
 P.ì&gt;Ã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&quot; yÎ ¥üwKï¿Uzçç_ê¼ô¼õæUv÷7P\Í=ËC :&amp;6Göæ£@æ½êz,ï1ÿW'tX¾^¼ú'3ÕRiÞ¤jî׺&quot;ÌFnxÌtö¾ôÏ&gt;ÊôÔó-ö§ôÞ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&gt;:ó¥¾®Ó %Õíÿ½xãÍÓ°#Û°TRMþøÓc]#Ïg:%J)©2Ǻx$ÜlsùÑ.]yõîç¾p4pýÜTæÏÿø²[2èt{å¶T¨
£^þ½G·p£±,HJ¤:ñìËÉá1óç?+ðv©Rª[½é­(RØ_ ÝK÷Å  ¤y'wóOs­C % µ¥ªµ$ÈutuwïîëÎÏåßýú[-¾¶)é&amp;í«×N^Zn|xíÝ¡ïó¼µuebzoj{ÞäÌÚ~¸¼øk¿÷¯)%£7&gt;q]ιʰg^J8gÿǽØxê(&gt;¿* @çè¶N¿ÞÛq|K0TÙ{¹÷ó3ïäJ«ÈZ3µ^&quot;øô³cg²
NÞü_ç~þöpcÁÛÙQë¼V×Jrcö(ÖuÖØ@Å7ªTëòß*¼ùÿ
JmyÃr¾ Ìö;3«c|­»ïDÊNÔðÖ¼¿p3?óaÎ_ßÜÜÃW6%*
¨¦×ØàØzàê÷owûn­n6f°£T    DÆ'ª¾löÔ[Üpßß.µwgfº¶Ç^éR
ÑtÊRX^Ü¥0ðdà
/÷Øn»&quot;)ò¾öÓÄðéìñ+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&amp;Fή¿¸rñI%ùè¹ÕÑs«JµEgþ~úÆMSe-Û    åyD§?é|¼r¾ëýÕsµßSªýy
ÀDÓQ  무Ä3¦n1 bã¡n5¹øó+Hã©,.&amp;³×7P¬Ø½ë½S7z§ûd78?2ï,v)u)ùÍùRfãâÁ­ÎvK.ªÔ²iãs
¿6Të 8EÈD+Ù;M£U_òºUC?µT£¿ú§²Ü&quot; Ûd 9ûNξóQ¿¦É¾áÂÀh.}n9Ýí9é À½=û[é1R%6ïO©]ÜM¿ÚN&quot; `[µixHr_0R²
ÍúË¢ëùÎñtvóóαeyDç&amp;3·o$þkoWùÄøòñ{×zö·Ò=¸sÅ6¢²¹IçhÛ (3Oò(qÊ ­a2ÉÆËçáøW®­w§³Mñ3¤cË&gt;W
«ÎêóÓïí{è= #ilz£Íjýѽâ®
x @Ó¨®oR@5¤½bô·B ×Ö;)irM_gÄÐèÎE¼Ã9{@(¸Õ ¥DðöÆd&quot;P¤ÉÒ*~ËÚ:ªÓh#o ¸ríÿ¾Ì/ú2VÂb@TQöyõG+l£EryS#íæ&quot;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。我需要启用另一个服务器设置吗?

2 个答案:

答案 0 :(得分:0)

这种类型的错误有时会让我感到烦恼,请尝试添加:     模具();

在最后一行之后:     返回$ this-&gt; image_render($ html);

有时它对我有用。

答案 1 :(得分:0)

文本看起来像PNG数据流,只能由文本编辑器而不是图像查看器呈现。

相关问题