本文实例讲述了PHP常用的类封装。分享给大家供大家参考,具体如下:
这4个类分别是Mysql类、 分页类、缩略图类、上传类。
Mysql类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
<?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(); } } ?> |
分页类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
<?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; } } ?> |
缩略图类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
<?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 ); } } ?> |
上传类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
<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程序设计有所帮助。
原文链接:https://blog.csdn.net/baochao95/article/details/52055353