首页 理论教育PHPMVC开发实战:文件上传解决方案及实例

PHPMVC开发实战:文件上传解决方案及实例

【摘要】:ThinkPHP内置了文件上传扩展类UpdateFile,该类库对move_uploaded_file函数进行了高度封装,实现了上传文件类型检测、上传文件大小检测、上传文件压缩等重要功能。表11-2 UpdateFile扩展类成员属性2.Image类库UpdateFile文件上传类对图像文件处理是基于Image类库实现的,同时Image类也是一个对外公开的扩展类。

PHP内置了非常强大、易用的文件上传模块,使得过去需要额外扩展才能实现的文件上传,在PHP中只需要使用一个简单的move_uploaded_file函数即可实现。ThinkPHP内置了文件上传扩展类UpdateFile,该类库对move_uploaded_file函数进行了高度封装,实现了上传文件类型检测、上传文件大小检测、上传文件压缩等重要功能。下面将深入介绍。

1.UpdateFile类库

虽然PHP提供了move_uploaded_file函数,能够方便地实现文件上传功能。但一个完善的文件上传步骤至少需要包括文件大小检测、类型检测等,然后才能执行move_uploaded_file上传,如以下代码所示。

978-7-111-42852-7-Part02-575.jpg

在MVC开发中,这些操作均被封装为功能类。文件类型、大小等使用类成员属性定义,UpdateFile类库是ThinkPHP内置的文件上传扩展类,使用时需要额外引入。如以下代码所示。

978-7-111-42852-7-Part02-576.jpg

UpdateFile类是实例类,使用时需要实例化。一个最简单的上传功能只需要调用upload方法即可,如以下代码所示。

978-7-111-42852-7-Part02-577.jpg

如上述代码所示,UpdateFile扩展类中提供了maxSize、allowExts等实用属性,这些属性可以对文件大小、类型进行检测,防止用户随意上传文件,给系统造成安全隐患。UpdateFile提供了众多文件上传处理属性,如表11-2所示。

表11-2 UpdateFile扩展类成员属性

978-7-111-42852-7-Part02-578.jpg

2.Image类库

UpdateFile文件上传类对图像文件处理是基于Image类库实现的,同时Image类也是一个对外公开的扩展类(位于ORG/Util目录)。开发人员可以直接调用Image图像处理类直接对上传图片进行进一步处理。Image类包括了静态成员方法及实例成员方法,静态方法使用时不需要实例化。下面将对常用的成员方法进行介绍。

(1)getImageInfo(www.chuimin.cn)

getImageInfo方法用于获取图像文件综合信息(基于PHP内置的getimagesize函数实现),方法形式如下。

978-7-111-42852-7-Part02-579.jpg

参数img表示完整的图片文件路径。一旦获取成功getImageInfo方法将会返回图像宽度、高度、大小等。如以下代码所示。

978-7-111-42852-7-Part02-580.jpg

978-7-111-42852-7-Part02-581.jpg

(2)water

water方法能够生成图片水印,方法形式如下。

978-7-111-42852-7-Part02-582.jpg

参数source表示需要加入水印的原图片;参数water表示水印图片,只支持jpg、png图片格式;参数savename表示水印合成后的图片文件;参数alpha表示水印透明度。

(3)buildString

buildString方法可以将字符串转换为图片,方法形式如下。

978-7-111-42852-7-Part02-583.jpg

参数string表示需要转换的字符串,不支持中文;参数rgb表示图像字体的颜色值,例如array("0","0","0")表示黑色字体;参数filename表示输出文件名;参数type表示图像类型,常用的有jpg、bmp、png;参数disturb表示图像干扰点,共支持4个值:0(无干扰点)、1(点干扰)、2(线干扰)、3(复合干扰);参数border表示是否添加图像边框。