济南网站建设,济南做网站,济南网站制作

php 生成图片验证码 laravel

admin 2018年04月21日 PHP知识 1167 0

环境:

"php": ">=5.5.9"

"laravel/lumen-framework": "5.2.*",我使用的是laravel框架,其他php框架也一样

使用方法:

1.使用composer获取验证码库



php composer.phar require lifei6671/php-captcha

2.具体使用



<?php

use Minho/Captcha/CaptchaBuilder;

$captch = new CaptchaBuilder();

$captch->initialize([

'width' => 150, // 宽度

'height' => 50, // 高度

'line' => false,// 直线

'curve' => true,// 曲线

'noise' => 1,// 噪点背景

'fonts' => []// 字体

]);

$captch->create();

//直接输出图片:

$captch->output(1);

//保存图片到硬盘:

$captch->save('1.png',1);

//获取验证码文字并存储到session中:

$_SESSION['captch'] = $captch->getText();

示例:


该示例是基于上面的环境




获取验证码和校验验证码的类CaptchaMake<?php

/**

* Created by PhpStorm.

* User: zero

* Date: 2018/2/26

* Time: 16:40

*/

namespace App/Libs;

use Illuminate/Http/Request;

use Minho/Captcha/CaptchaBuilder;

use Exception;

use Log;

class CaptchaMake

{

/**

* 获取验证码

* @return string

*/

public static function getCaptcha()

{

try{

$captch = new CaptchaBuilder();

$captch->initialize([

'width' => 150, // 宽度

'height' => 50, // 高度

'line' => false,// 直线

'curve' => true,// 曲线

'noise' => 2,// 噪点背景

'fonts' => []// 字体

]);

$captch->create();

new SessionManager();

$_SESSION['captch'] = $captch->getText();

//生成并返回图片流base64编码

ob_start ();

$captch->output(1);

$image_data = ob_get_contents ();

ob_end_clean ();

$image_data_base64 = base64_encode ($image_data);

return $image_data_base64;

} catch (Exception $e) {

Log::emergency('获取图片验证码报错: ', [$e->getMessage()]);

Log::error($e->getFile() . ":" . $e->getLine());

}}

/**

* 校验验证码

* @param Request $request

* @return array

*/

public static function checkCaptcha(Request $request)

{

try{

$code=$request->input('code',false);

if($code===false){

return ReturnCode::create(-1, [], '请填写图片验证码');

}

if(!isset($_SESSION['captch'])){

return ReturnCode::create(-1, [], '图片验证码已过期,请重新获取');

}

if($code!=$_SESSION['captch']){

return ReturnCode::create(-1, [], '图片验证码错误');

}

return ReturnCode::create(ReturnCode::SUCCESS);

} catch (Exception $e) {

Log::emergency('校验图片验证码报错: ', [$e->getMessage()]);

Log::error($e->getFile() . ":" . $e->getLine());

}}

}将验证码存储到基于redis的session中的类SessionManager<?php

/**

* Created by PhpStorm.

* User: zero

* Date: 2018/2/27

* Time: 15:44

*/

namespace App/Libs;

use Log;

class SessionManager

{

private $redis;

private $sessionSavePath;

private $sessionName;

public function __construct(){

$this->redis = app('redis');

$this->sessionExpireTime = 30;

$retval = session_set_save_handler(

array($this,"open"),

array($this,"close"),

array($this,"read"),

array($this,"write"),

array($this,"destroy"),

array($this,"gc")

);

session_start();

}

//会话开始时,会执行该方法,连接redis服务器

public function open($path,$name){

return true;

}

//会话结束时,调用该方法,关闭redis连接

public function close(){

return true;

}

// 在自动开始会话或者通过调用 session_start() 函数手动开始会话之后,PHP 内部调用 read 回调函数来获取会话数据。

public function read($id){

//Log::info('===============session=======read====$id===='.$id);

//Log::info('===============session=====expire=$id===='. $this->redis->ttl($id));

$value = $this->redis->get($id);//获取redis中的指定记录

if($value){

return $value;

}else{

return '';

}

}

// 会话保存数据时调用该方法,在脚本执行完或session_write_close方法调用之后调用

public function write($id,$data){

//Log::info('===============session====write=======$id===='.$id);

//Log::info('===============session====write=======$data===='.$data);

if($this->redis->set($id,$data)){//以session ID为键,存储

$this->redis->expire($id,$this->sessionExpireTime);//设置redis中数据的过期时间,即session的过期时间

return true;

}

return false;

}

// 清除会话中的数据,当调用session_destroy()函数,或者调用 session_regenerate_id()函数并且设置 destroy 参数为 TRUE 时,会调用此回调函数。

public function destroy($id){

if($this->redis->delete($id)){//删除redis中的指定记录

return true;

}

return false;

}

public function gc($maxlifetime){

return true;

}

public function __destruct(){

session_write_close();

}

//设置过期时间

public function setSessionExpireTime($time){

$this->sessionExpireTime = $time;

}

}


该示例,需要基本熟悉laravel框架,如有不懂,可以在评论区提问,我会尽力解答


看到这里如果这篇文章真的帮到你了,不妨打赏一下哦!
浏览器与PHP程序的交互
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

分享:

支付宝

微信