Verify.class.php 验证码类

<?php

class Verify{
const VERIFY_TYPE_NUM=1;
const VERIFY_TYPE_EN=2;
const VERIFY_TYPE_BOTH=3;
/*
* 作用:输出验证码图片
* 参数:$type--验证码的类型 数字-1 字母-2 数字加字母-3
* $fontSize---字体大小
* $width
* $height
* $charNum---字的个数
* $fontPath---字体文件路径
*/
public static function showVerify($width=100,$height=35,$type=3,$fontSize=20,$charNum=4,$fontPath="./font/heiti.ttf"){
//创建空白画布
$i=imagecreatetruecolor($width,$height);
$white=imagecolorallocate($i, 255, 255, 255);
imagefill($i,0,0,$white);
//产生字符库
$content="";
if($type==3){//数字+大小写字母
$content=join('',array_merge(range(0,9),range('a','z'),range('A',"Z")));
}else if($type==2){
$content=join('',array_merge(range('a','z'),range('A',"Z")));
}else{
$content=join('',array_merge(range(0,9)));
}
//随机产生$charNum位字符
$str=substr(str_shuffle($content),0,$charNum);
//把字符放到session中
$_SESSION['verify']=$str;
//把字符逐个写在画布上
for($j=0;$j<strlen($str);$j++){
$char=substr($str,$j,1);
$color=imagecolorallocate($i, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
$y=$height-10;
$x=(($width-20)/$charNum)*$j+10;
imagefttext($i,$fontSize,mt_rand(-20,20),$x,$y,$color,$fontPath,$char);
}
//加干扰点
for($j=1;$j<=500;$j++){
$color=imagecolorallocate($i, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
imagesetpixel($i,mt_rand(0,$width),mt_rand(0,$height),$color);
}
//加干扰线
for($j=1;$j<=4;$j++){
$color=imagecolorallocate($i, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
imageline($i,0,mt_rand(0,$height),$width,mt_rand(0,$height),$color);
}
//输出
imagepng($i);
}
}

Model.class.php PDO类

<?php
class Model{
protected $tableName;//表名
protected $DbOb;//PDO类的对象
function __construct(){
$pOb=new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USERNAME,DB_PASSWORD);
$pOb->exec("set names ".DB_CHARSET);
$this->DbOb=$pOb;
}
//添加
function add($arr){
$kStr="";
$kArr=array_keys($arr);
$kStr=join(",",$kArr);
$vStr="";
for($i=0;$i<count($arr);$i++){
$vStr.=",:p".$i;
}
$vStr=substr($vStr,1);
$sql="insert into {$this->tableName}($kStr) values($vStr)";
$PS=$this->DbOb->prepare($sql);
//绑定数据
$vArr=array_values($arr);//索引下标 array(0=>'ttt',1=>'ccc')
foreach($vArr as $k=>$v){//$k 0 $v ttt $k 1 $v ccc
$name="p".$k;
$$name=$v;
$PS->bindParam(":p".$k,$$name,PDO::PARAM_STR);
}
$re=$PS->execute();
if($re){
return $this->DbOb->lastInsertId();
}else{
return false;
}
}
//修改
function save($arr,$where="",$bindArr=array()){
//update news set title='t',content='c' where id=5
$fvStr="";
$i=0;
foreach($arr as $k=>$v){
$name="p".$i;
$$name=$v;
$fvStr.=",$k=:p".$i;
$i++;
}
$fvStr=substr($fvStr,1);
$where = !empty($where) ? "where ".$where : "";
$sql="update {$this->tableName} set {$fvStr} $where";
$PS=$this->DbOb->prepare($sql);
//绑定数据
for($i=0;$i<count($arr);$i++){
$name="p".$i;
$PS->bindParam(":p".$i,$$name,PDO::PARAM_STR);
}
$i=0;
foreach($bindArr as $k=>$v){
$name="p".$i;
$$name=$v[0];
if($v[1]=='int'){
$PS->bindParam($k,$$name,PDO::PARAM_INT);
}else{
$PS->bindParam($k,$$name,PDO::PARAM_STR);
}
$i++;
}
return $PS->execute();
}
//删除 delete from 表名 where 条件
function delete($where="",$bindArr=array()){
$where = !empty($where) ? "where ".$where : "";
$sql="delete from {$this->tableName} $where";
$PS=$this->DbOb->prepare($sql);
//绑定数据
$i=0;
foreach($bindArr as $k=>$v){
$name="p".$i;
$$name=$v[0];
if($v[1]=='int'){
$PS->bindParam($k,$$name,PDO::PARAM_INT);
}else{
$PS->bindParam($k,$$name,PDO::PARAM_STR);
}
$i++;
}
return $PS->execute();
}
//查询
function select($fields="*",$where="",$limit="",$order="",$bindArr=array()){
$where = !empty($where) ? "where ".$where : "";
$order = !empty($order) ? "order by ".$order : "";
$limit = !empty($limit) ? "limit ".$limit : "";
$sql="select $fields from {$this->tableName} $where $order $limit";
//准备执行
$PS=$this->DbOb->prepare($sql);
//绑定数据
$i=0;
foreach($bindArr as $k=>$v){
$name="p".$i;
$$name=$v[0];
if($v[1]=='int'){
$PS->bindParam($k,$$name,PDO::PARAM_INT);
}else{
$PS->bindParam($k,$$name,PDO::PARAM_STR);
}
$i++;
}
//执行
$re=$PS->execute();
if($re){//返回二维数组
$PS->setFetchMode(PDO::FETCH_ASSOC);
return $PS->fetchAll();
}else{
return array();
}
} }

Thumb.class.php 缩略图类

<?php
class Thumb{
/*
* $sPath:被缩略的图片的路径
* $toPath:缩略图保存在哪
* $toW:小图的宽
* $toH:小图的高
* $preFix:小图名字的前缀
*/
function saveThumb($sPath,$toPath,$toW,$toH,$prefix="s_"){
if(is_file($sPath)){
//产生一个空白图,放缩略图
$t=imagecreatetruecolor($toW, $toH);
$white=imagecolorallocate($t, 255, 255, 255);
imagefill($t,0,0,$white);
//获取原图片的信息
$arr=getimagesize($sPath);
$sType=$arr['mime'];
$sW=$arr[0];
$sH=$arr[1];
//产生原图片资源
switch($sType){
case 'image/jpeg':
case 'image/pjpeg':
$s=imagecreatefromjpeg($sPath);
$funName="jpeg";
break;
case 'image/gif':
$s=imagecreatefromgif($sPath);
$funName="gif";
break;
case 'image/png':
$s=imagecreatefrompng($sPath);
$funName="png";
break;
default :
return false;
}
//算出缩放的比例
$biliW=$sW/$toW;
$biliH=$sH/$toH;
if($biliW>$biliH){
$endBili=$biliW;
}else{
$endBili=$biliH;
}
//图片被缩略后的宽 高
$tW=$sW/$endBili;
$tH=$sH/$endBili;
//到目标图片的位置
$tX=($toW-$tW)/2;
$tY=($toH-$tH)/2;
//拷贝
$re=imagecopyresized($t,$s,$tX,$tY,0,0,$tW,$tH,$sW,$sH);
if($re){
//命名
$oldName=pathinfo($sPath,PATHINFO_BASENAME);
$newName=$prefix.$oldName;
//生成缩略图
$trueFunName="image".$funName;
$re=$trueFunName($t,$toPath."/".$newName);
//返回结果
return $re;
}else{
return false;
} }else{
return false;
} }
}

php-验证码类-PDO类-缩略图类的更多相关文章

  1. pdo文字水印类,验证码类,缩略图类,logo类

    文字水印类 image.class.php <?php /** * webrx.cn qq:7031633 * @author webrx * @copyright copyright (c) ...

  2. PDO和PDOStatement类常用方法

    PDO — PDO 类 PDO::beginTransaction — 启动一个事务 PDO::commit — 提交一个事务 PDO::__construct — 创建一个表示数据库连接的 PDO ...

  3. php四个常用类封装 :MySQL类、 分页类、缩略图类、上传类;;分页例子;

    Mysql类 <?php /** * Mysql类 */ class Mysql{ private static $link = null;//数据库连接 /** * 私有的构造方法 */ pr ...

  4. 【PHP缩略图类】手机照片不能生成缩略图问题以及解决方式

    [本文原创,谢绝转载] 一.出现的问题 这几天做了手机上传照片并裁出缩略图的接口的測试,发现无论怎么.生成的缩略图都是一片漆黑.:-( 然后就把这个缩略图类单拿出来进行測试,发现仅仅要是手机拍出来的照 ...

  5. PDO数据库操作类

    <?php include 'common_config.php'; /** * Class Mysql * PDO数据库操作类 */ class Mysql { protected stati ...

  6. PHP原生写的生成图片缩略图类

    PHP原生写的生成图片缩略图类,本文以京东商品图片为例,分别生成三种不同尺寸的图片.调用方法很简单只要传参数高度和宽度,及新图片的名称. 引入缩略图类 include_once 'ImageResiz ...

  7. PHP数据库链接类(PDO+Access)实例分享

    这篇文章主要介绍了PHP数据库链接类(PDO+Access),有需要的朋友可以参考一下 PHP PDO Access链接 复制代码代码如下: class DbHelpClass     {       ...

  8. laravel5.8笔记五:基类控制器和基类模型

    建立基类的目的就是为了方便继承.比如:Admin模块访问,是否登陆.检测登陆可以写到基类里面 控制器基类 原始基类:app\Http\Controllers\Controller.php,我们下面要做 ...

  9. Date日期类,Canlendar日历类,Math类,Random随机数学类

    Date日期类,SimpleDateFormat日期格式类 Date  表示特定的时间,精确到毫秒 常用方法 getTime() setTime() before() after() compareT ...

随机推荐

  1. JavaSE---System类

    1.概述 1.1 System类  代表当前java程序的运行平台: 1.2 System类  提供的类方法: getenv():获取系统所有的环境变量: getenv(String name):获取 ...

  2. c# 泛型的抗变和协变

    namespace test { // 泛型的协变,T 只能作为返回的参数 public interface Class1<out T> { T Get(); int Count { ge ...

  3. Ververica Platform-阿里巴巴全新Flink企业版揭秘

    摘要:2019云栖大会大数据 & AI专场,阿里巴巴资深技术专家王峰带来“Ververica Platform-阿里巴巴全新Flink企业版揭秘”的演讲.本文主要从Ververica由来开始谈 ...

  4. Python基础教程(003)--Python的设计目标

    前言 了解Python的设计目标,这节是了解Python的背景,不需要掌握,但是需要你知道有这个东西.就是Python的目的是什么.作者开发这个Python语言的目的是什么. 知识点 一门简单直观的语 ...

  5. k8s pod,pvc,pv无法删除问题

    注意步骤: 一般删除步骤为:先删pod再删pvc最后删pv 但是遇到pv始终处于“Terminating”状态,而且delete不掉 pod一直删不掉 [root@hadoop01 nacos-k8s ...

  6. <自动化测试>之<selenium API 用法2>

    不知道之前的selenium API 用法1,有没有去练习, 个人认为线性代码还是要靠敲的, 后面的模块化除了多敲还需要一定的编程思想去理解, 今天下午不是很忙就给来这儿补充点selenium api ...

  7. VC2010 CString.Format使用报错 error C2664

    error C2664: “void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)”: 不能将参数 1 ...

  8. JAVA 的StringBuffer类

    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...

  9. linux c(一)Helloworld

    终端的屏幕上输入命令如下: 使用vi helloworld.c打开helloworld.c文件,写下如下代码:

  10. Hexo next 添加复制粘贴代码的功能

    文章目录 广告: 自己的方式 感谢 广告: 本人博客地址:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io ...