Blogger Information
Blog 263
fans 3
comment 2
visits 113269
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php四个常用类封装 (*)
福哥的博客
Original
846 people have browsed it

mysql类:

<?php/**
 * Mysql类
 */class Mysql{    private static $link = null;//数据库连接

    /**
     * 私有的构造方法
     */
    private function __construct(){}    /**
     * 连接数据库
     * @return obj 资源对象
     */
    private static function conn(){        if(self::$link === null){
            $cfg = require './config.php';
            self::$link = new Mysqli($cfg['host'],$cfg['user'],$cfg['pwd'],$cfg['db']);
            self::query("set names ".$cfg['charset']);//设置字符集
        }        return self::$link;
    }    /**
     * 执行一条sql语句
     * @param  str $sql 查询语句
     * @return obj      结果集对象
     */
    public static function query($sql){        return self::conn()->query($sql);
    }    /**
     * 获取多行数据
     * @param  str $sql 查询语句
     * @return arr      多行数据
     */     
    public static function getAll($sql){
        $data = array();
        $res = self::query($sql);        while($row = $res->fetch_assoc()){
            $data[] = $row;
        }   
        return $data;
    }    /**
     * 获取一行数据
     * @param  str $row 查询语句
     * @return arr      单行数据
     */ 
    public static function getRow($row){
        $res = self::query($sql);        return $res->fetch_assoc();
    }    /**
     * 获取单个结果
     * @param  str $sql 查询语句
     * @return str      单个结果
     */     
    public static function getOne($sql){
        $res = self::query($sql);
        $data = $res->fetch_row();        return $data[0];
    }    /**
     * 插入/更新数据
     * @param  str $table  表名
     * @param  arr $data  插入/更新的数据
     * @param  str $act   insert/update
     * @param  str $where 更新条件
     * @return bool 插入/更新是否成功
     */
    public static function exec($table,$data,$act='insert',$where='0'){        //插入***作
        if($act == 'insert'){
            $sql = 'insert into '.$table;
            $sql .= ' ('.implode(',',array_keys($data)).')';
            $sql .= " values ('".implode("','",array_values($data))."')";
        }else if($act == 'update'){
            $sql = 'update '.$table.' set ';
            foreach ($data as $k => $v) {
                $sql .= $k.'='."'$v',";
            }
            $sql = rtrim($sql,',');
            $sql .= ' where 1 and '.$where;
        }        return self::query($sql);
    }    /**
     * 获取最近一次插入的主键值
     * @return int 主键
     */
    public static function getLastId(){        return self::conn()->insert_id;
    }    /**
     * 获取最近一次***作影响的行数
     * @return int 影响的行数
     */
    public static function getAffectedRows(){        return self::conn()->affected_rows;
    }    /**
     * 关闭数据库连接
     * @return bool 是否关闭
     */
    public static function close(){        return self::conn()->close();
    }

}
?>

分页类:

<?php/**
 * 分页类
 * @author webbc
 */class Page{

    private $num;//总的文章数
    private $cnt;//每页显示的文章数
    private $curr;//当前的页码数
    private $p = 'page';//分页参数名
    private $pageCnt = 5;//分栏总共显示的页数
    private $firstRow;//每页的第一行数据
    private $pageIndex = array();//分页信息

    /**
     * 构造函数
     * @param int $num 总的文章数
     * @param int $cnt 每页显示的文章数
     */
    public function __construct($num,$cnt=10){
        $this->num = $num;        $this->cnt = $cnt;        $this->curr = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]);        $this->curr = $this->curr > 0 ? $this->curr : 1;        $this->firstRow   = $this->cnt * ($this->curr - 1);        $this->getPage();
    }    /**
     * 分页方法
     */
    private function getPage(){
        $page = ceil($this->num / $this->cnt);//总的页数
        $left = max(1,$this->curr - floor($this->pageCnt/2));//计算最左边页码
        $right = min($left + $this->pageCnt - 1 ,$page);//计算最右边页码
        $left = max(1,$right - ($this->pageCnt - 1));//当前页码往右靠,需要重新计算左边页面的值
        for($i=$left;$i<=$right;$i++){            if($i == 1){                $index = '第1页';
            }else if($i == $page){                $index = '最后一页';
            }else{                $index = '第'.$i.'页';
            }            $_GET['page'] = $i;            $this->pageIndex[$index] = http_build_query($_GET);
        }
    }    /**
     * 返回分页信息数据
     * @return [type] [description]
     */
    public function show(){
        return $this->pageIndex;
    }
}?>

缩略图类:

<?php/**
 * 缩略图类
 * @author webbc
 */class Thumb{    private $thumbWidth;//缩略图的宽
    private $thumbHeight;//缩略图的高
    private $thumbPath;//缩略图保存的路径

    private $sourcePath;//原图的路径
    private $sourceWidth;//原图的宽度
    private $sourceHeight;//原图的高度
    private $sourceType;//原图的图***类型


    /**
     * 构造函数
     * @param str  $sourcePath  原图的绝对路径
     * @param integer $thumbWidth  缩略图的宽
     * @param integer $thumbHeight 缩略图的高
     */
    public function __construct($sourcePath,$thumbWidth=200,$thumbHeight=200){        //获取原图的绝对路径
        $this->sourcePath = $sourcePath;        //获取缩略图的大小
        $this->thumbWidth = $thumbWidth;
        $this->thumbHeight = $thumbHeight;
        $this->thumbPath = $this->getThumbPath();        //计算大图的大小
        list($this->sourceWidth,$this->sourceHeight,$this->sourceType) = getimagesize($this->sourcePath);
    }    /**
     * 确定缩略图保存的路径
     * @return [type] [description]
     */
    private function getThumbPath(){
        $ext = $this->getExt();
        $filename = basename($this->sourcePath,'.'.$ext).'_thumb'.'.'.$ext;        return $thumbPath = __DIR__.'/'.$filename;
    }    /**
     * 获取原图的扩展名
     * @return str 扩展名
     */
    private function getExt(){        return pathinfo($this->sourcePath,PATHINFO_EXTENSION);
    }    /**
     * 检测原图的扩展名是否合法,并返回相应类型
     * @return  bool/str 原图的类型
     */
    public function getType(){
        $typeArr = array(            1 => 'gif',            2 => 'jpeg',            3 => 'png',            15 => 'wbmp'
        );        if(!in_array($this->sourceType, array_keys($typeArr))){            return false;
        }        return $typeArr[$this->sourceType];
    }    /**
     * 按照缩略图大小,计算大图的缩放比例
     * @return float 缩放比例
     */
    public function calculateRate(){        return min($this->thumbWidth / $this->sourceWidth,$this->thumbHeight / $this->sourceHeight);
    }    /**
     * 计算大图按照缩放比例后,最终的图像大小
     * @param float $rate 缩放比例
     * @return arr 缩放后的图***大小
     */
    public function getImageSizeByRate($rate){
        $width = $this->sourceWidth * $rate;
        $height = $this->sourceHeight * $rate;        return array('w'=>$width,'h'=>$height);
    }    /**
     * 保存成文件
     * @return [type] [description]
     */
    public function saveFile($image){
        $method = "image".$this->getType();
        $method($image,$this->thumbPath);
    }    /**
     * 进行绘画***作
     * @return [type] [description]
     */
    public function draw(){        if(!($type = $this->getType())){
            echo "文件类型不支持";            return ;
        }        //创建大图和小图的画布
        $method = "imagecreatefrom".$type;
        $bigCanvas = $method($this->sourcePath);
        $smallCanvas = imagecreatetruecolor($this->thumbWidth, $this->thumbHeight);        //创建白色画笔,并给小图画布填充背景
        $white = imagecolorallocate($smallCanvas, 255, 255, 255);
        imagefill($smallCanvas, 0, 0, $white);        //计算大图的缩放比例
        $rate = $this->calculateRate();        //计算大图缩放后的大小信息
        $info = $this->getImageSizeByRate($rate);        //进行缩放
        imagecopyresampled($smallCanvas, $bigCanvas,
            ($this->thumbWidth - $info['w']) / 2 , ($this->thumbHeight - $info['h']) / 2, 
            0, 0, $info['w'], $info['h'], $this->sourceWidth, $this->sourceHeight);        //保存成文件
        $this->saveFile($smallCanvas);        //销毁画布
        imagedestroy($bigCanvas);
        imagedestroy($smallCanvas);
    }
}

?>

上传类:

<meta charset="utf8"/>
<?php/**
 * 文件上传类
 * @author webbc
 */class Upload{    private $allowExt = array('gif','jpg','jpeg','bmp','png','swf');//限制文件上传的后缀名
    private $maxSize = 1;//限制最大文件上传1M

    /**
     * 获取文件的信息
     * @param  str $flag 上传文件的标识
     * @return arr       上传文件的信息数组
     */
    public function getInfo($flag){        return $_FILES[$flag];
    }    /**
     * 获取文件的扩展名 
     * @param str $filename 文件名
     * @return str 文件扩展名
     */
    public function getExt($filename){        return pathinfo($filename,PATHINFO_EXTENSION);
    }    /**
     * 检测文件扩展名是否合法
     * @param str $filename 文件名
     * @return bool 文件扩展名是否合法
     */
    private function checkExt($filename){
        $ext = $this->getExt($filename);        return in_array($ext,$this->allowExt);
    }    /**
     * 检测文件大小是否超过限制
     * @param int size 文件大小
     * @return bool 文件大小是否超过限制
     */
    public function checkSize($size){        return $size < $this->maxSize * 1024 * 1024;
    }    /**
     * 随机的文件名
     * @param int $len 随机文件名的长度
     * @return str 随机字符串
     */
    public function randName($len=6){        return substr(str_shuffle('abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ234565789'),0,$len);
    }    /**
     * 创建文件上传到的路径
     * @return str 文件上传的路径
     */ 
    public function createDir(){
        $dir = './upload/'.date('Y/m/d',time());        if(is_dir($dir) || mkdir($dir,0777,true)){            return $dir;
        }
    }    /**
     * 文件上传
     * @param str $flag 文件上传标识
     * @return arr 文件上传信息
     */
    public function uploadFile($flag){        if($_FILES[$flag]['name'] === '' || $_FILES[$flag]['error'] !== 0){
            echo "没有上传文件";            return;
        }
        $info = $this->getInfo($flag);        if(!$this->checkExt($info['name'])){
            echo "不支持的文件类型";            return;
        }        if(!$this->checkSize($info['size'])){
            echo "文件大小超过限制";            return;
        }
        $filename = $this->randName().'.'.$this->getExt($info['name']);
        $dir = $this->createDir();        if(!move_uploaded_file($info['tmp_name'], $dir.'/'.$filename)){
            echo "文件上传失败";
        }else{            return array('filename'=>$filename,'dir'=>$dir);
        }
    }

}
?>


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post