全部博文(921)
分类:
2011-01-02 20:35:23
一直用自己写的验证码生成类,今天看到zend也有验证码生成类,就研究了一下,改为用zend的。 Zend_Captcha有一些特色,它会默认将生成的图片保存到服务器端,并且将验证码的值也保持到session中,不过这2个我都不喜欢,后面会介绍怎么去掉它们。 先看一下controller中的示例: $captchaSession = new Zend_Session_Namespace("captcha"); //将验证码存储到session中 $captcha = new Zend_Captcha_Image( array( 'font'=>'captcha/fonts/FetteSteinschrift.ttf', //字体文件路径 'fontsize'=>24, //字号 'writeInFile'=>false, //是否将图片数据写入文件中 'width'=>120, //图片宽 'height'=>40, //图片高 'wordlen'=>4, //字母数 'DotNoiseLevel'=>10 //噪点 )); $captchaSession -> word= $captcha->getWord(); $captcha->generate(); //生成图片 这个是将验证码的值存入我设定的session中,并设定图片不写入文件中。这部分代码会将图片数据流输入到浏览器中。所以你可以把它写入一个action中(比如captcha控制器中show动作),然后调用。 比如在view视图中: 因为zend框架本身将word存入session中,处理的很好,只不过我这里不知怎么出了一些问题,我一不推荐把它去掉,所以就只说一下怎样设置图片是否写入文件。 我把代码做了修改: /Zend/Captcha/Image.php 我添加的内容是: /** * 设置是否将图片写入文件中 * * @var bool */ protected $_writeInFile = false; /** * 设置是否将图片写入文件中 */ public function setWriteInFile($writeInFile){ $this->_writeInFile = $writeInFile; return $this; } /** * @return bool */ public function getWriteInFile(){ return $this->_writeInFile; } _generateImage函数我做了修改: 将 imagepng($img2, $img_file); 改为 if($this->_writeInFile){ imagepng($img2, $img_file); }else{ header("Content-type: image/" . str_replace('.','',$this->getSuffix())); header ( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); // Date in the past imagepng($img); } imagedestroy($img); imagedestroy($img2); ok. 参考资料:http://hi.baidu.com/haomao/blog/item/ea0aaf4b0b2f93f682025ce8.html |