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);
        }
    }

}
?>

 php代码:

效果图:

php四个常用类封装 :MySQL类、 分页类、缩略图类、上传类;;分页例子;的更多相关文章

  1. 封装upload文件上传类

    <?php //封装php中的单文件(图片)上传类 /*  //参数1:$file 文件数组  5个属性值 name,type,size,tmp,error   //参数2:文件保存的路径$pa ...

  2. PHP封装一个通用好用的文件上传处理类

    封装一个文件上传类完成基本功能如下: 1.可上传多个或单个文件 2.上传成功返回一个或多个文件名 3.上传失败则返回每个失败文件的错误信息 上传类中的基本功能: 1.构造参数,用户可以自定义配置参数, ...

  3. Yii 1.1.17 四、属性标签、AR类增删改查、使用上传类与扩展第三方类库

    一.属性标签与规则设置 当进入网站页面,将会读数据库返回信息到视图上.那么,现在定义模型中的属性在视图标签上的显示, 也就是模型属性到前台标签的映射 // 定义模型属性到前台标签的映射 public ...

  4. PHP图片上传类

    前言 在php开发中,必不可少要用到文件上传,整理封装了一个图片上传的类也很有必要. 图片上传的流程图 一.控制器调用 public function upload_file() { if (IS_P ...

  5. Php文件上传类class.upload.php

    简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮助你快速的给自己的网站集成上传文件功能.不仅如此,此分类还有一些列的处理功能,可以对上传的文件或者本地的文件进行处 ...

  6. 自定义MVC框架之工具类-文件上传类

    截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...

  7. php-数据库-分页类-上传类

    config.ini.php <?php header("content-type:text/html;charset=utf-8"); //项目的根目录 define(&q ...

  8. THINKPHP源码学习--------文件上传类

    TP图片上传类的理解 在做自己项目上传图片的时候一直都有用到TP的上传图片类,所以要进入源码探索一下. 文件目录:./THinkPHP/Library/Think/Upload.class.php n ...

  9. Ueditor 1.4.3.1 使用 ThinkPHP 3.2.3 的上传类进行图片上传

    在 ThinkPHP 3.2.3 中集成百度编辑器最新版 Ueditor 1.4.3.1,同时将编辑器自带的上传类替换成 ThinkPHP 3.2.3 中的上传类. ① 下载编辑器(下载地址:http ...

随机推荐

  1. AppInventor学习笔记(二)——Hello Purr

    一.设计组件 1.定义: 就是WPF中的控件一个意思,直接调用不需要知道怎么写的,只需要写响应函数即可. 2.Designer: (1)界面如下: (2)分区: ①预览窗口: 用于放置应用中所需的组件 ...

  2. hive复杂类型与java类型的对应

    因为要往自定义的UDF传入复杂类型,所以需要对于这块的对应简单做一下总结 string java.lang.String, org.apache.hadoop.io.Text int int, jav ...

  3. PHP 输出表格单元格的数据之用表单的方式;

    echo "<table border=1 class="imagetable" >"; //使用表格格式化数据echo "<for ...

  4. node相关--WebSocket

    socket:socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. ajax: 通过HTTP请求+响应模式的方式来发送和 ...

  5. ArduinoYun的电源插座

    ArduinoYun的电源插座 Arduino Yun有两排插座,这些插座可以按类型分为三类:电源.数字IO和模拟输入.电源部分主要集中在如图1.7所示的部分本文选自Arduino Yun快速入门教程 ...

  6. LightOJ1257 Farthest Nodes in a Tree (II)(树的点分治)

    题目给一棵树,边带有权值,求每一点到其他点路径上的最大权和. 树上任意两点的路径都可以看成是经过某棵子树根的路径,即路径权=两个点到根路径权的和,于是果断树分治. 对于每次分治的子树,计算其所有结点到 ...

  7. BZOJ3881 : [Coci2015]Divljak

    对Alice的所有串构造AC自动机,并建出Fail树 每当Bob添加一个串时,在AC自动机上走,每走到一个点,就把它到根路径上所有点的答案+1 需要注意的是每次操作,相同的点只能被加一次 所以在需要操 ...

  8. 从Apache Storm学到的经验教训 —— storm的由来(转)

    阅读目录 Storm来源 初探 再探 构建第一个版本 被Twitter收购 开源的Storm 发布之后 Storm的技术演进 构建开发者社区版 离开Twitter 提交到Apache Apache孵化 ...

  9. 调用WebServiceWebService提示The maximum string content length quota (8192) has been exceeded while reading XML data的解决办法

    在web.config中,bindings节点下,对应的服务名称中,原本可能是自动折叠的“/>”,需要改成手动折叠的</binding>,然后在中间加上<readerQuota ...

  10. tyvj100题留念

    全是水题萌萌哒~0~... 留个纪念