本文实例讲述了PHP封装的多文件上传类实例与用法。分享给大家供大家参考,具体如下:
<?php
/**//*
* @(#)UploadFile.php
*
* 可同时处理用户多个上传文件。效验文件有效性后存储至指定目录。
* 可返回上传文件的相关有用信息供其它程序使用。(如文件名、类型、大小、保存路径)
* 使用方法请见本类底部(UploadFile类使用注释)信息。
*
*/
class UploadFile {
var $user_post_file = array(); //用户上传的文件
var $save_file_path; //存放用户上传文件的路径
var $max_file_size; //文件最大尺寸
var $last_error; //记录最后一次出错信息
//默认允许用户上传的文件类型
var $allow_type = array('gif', 'jpg', 'png', 'zip', 'rar', 'txt', 'doc', 'pdf');
var $final_file_path; //最终保存的文件名
var $save_info = array(); //返回一组有用信息,用于提示用户。
/**//**
* 构造函数,用与初始化相关信息,用户待上传文件、存储路径等
*
* @param Array $file 用户上传的文件
* @param String $path 存储用户上传文件的路径
* @param Integer $size 允许用户上传文件的大小(字节)
* @param Array $type 此数组中存放允计用户上传的文件类型
*/
function UploadFile($file, $path, $size = 2097152, $type = '') {
$this->user_post_file = $file;
$this->save_file_path = $path;
$this->max_file_size = $size; //如果用户不填写文件大小,则默认为2M.
if ($type != '')
$this->allow_type = $type;
}
/**//**
* 存储用户上传文件,检验合法性通过后,存储至指定位置。
* @access public
* @return int 值为0时上传失败,非0表示上传成功的个数。
*/
function upload() {
for ($i = 0; $i < count($this->user_post_file['name']); $i++) {
//如果当前文件上传功能,则执行下一步。
if ($this->user_post_file['error'][$i] == 0) {
//取当前文件名、临时文件名、大小、扩展名,后面将用到。
$name = $this->user_post_file['name'][$i];
$tmpname = $this->user_post_file['tmp_name'][$i];
$size = $this->user_post_file['size'][$i];
$mime_type = $this->user_post_file['type'][$i];
$type = $this->getFileExt($this->user_post_file['name'][$i]);
//检测当前上传文件大小是否合法。
if (!$this->checkSize($size)) {
$this->last_error = "The file size is too big. File name is: ".$name;
$this->halt($this->last_error);
continue;
}
//检测当前上传文件扩展名是否合法。
if (!$this->checkType($type)) {
$this->last_error = "Unallowable file type: .".$type." File name is: ".$name;
$this->halt($this->last_error);
continue;
}
//检测当前上传文件是否非法提交。
if(!is_uploaded_file($tmpname)) {
$this->last_error = "Invalid post file method. File name is: ".$name;
$this->halt($this->last_error);
continue;
}
//移动文件后,重命名文件用。
$basename = $this->getBaseName($name, ".".$type);
//移动后的文件名
$saveas = $basename."-".time().".".$type;
//组合新文件名再存到指定目录下,格式:存储路径 + 文件名 + 时间 + 扩展名
$this->final_file_path = $this->save_file_path."/".$saveas;
if(!move_uploaded_file($tmpname, $this->final_file_path)) {
$this->last_error = $this->user_post_file['error'][$i];
$this->halt($this->last_error);
continue;
}
//存储当前文件的有关信息,以便其它程序调用。
$this->save_info[] = array("name" => $name, "type" => $type,
"mime_type" => $mime_type,
"size" => $size, "saveas" => $saveas,
"path" => $this->final_file_path);
}
}
return count($this->save_info); //返回上传成功的文件数目
}
/**//**
* 返回一些有用的信息,以便用于其它地方。
* @access public
* @return Array 返回最终保存的路径
*/
function getSaveInfo() {
return $this->save_info;
}
/**//**
* 检测用户提交文件大小是否合法
* @param Integer $size 用户上传文件的大小
* @access private
* @return boolean 如果为true说明大小合法,反之不合法
*/
function checkSize($size) {
if ($size > $this->max_file_size) {
return false;
}
else {
return true;
}
}
/**//**
* 检测用户提交文件类型是否合法
* @access private
* @return boolean 如果为true说明类型合法,反之不合法
*/
function checkType($extension) {
foreach ($this->allow_type as $type) {
if (strcasecmp($extension , $type) == 0)
return true;
}
return false;
}
/**//**
* 显示出错信息
* @param $msg 要显示的出错信息
* @access private
*/
function halt($msg) {
printf("<b><UploadFile Error:></b> %s <br>\n", $msg);
}
/**//**
* 取文件扩展名
* @param String $filename 给定要取扩展名的文件
* @access private
* @return String 返回给定文件扩展名
*/
function getFileExt($filename) {
$stuff = pathinfo($filename);
return $stuff['extension'];
}
/**//**
* 取给定文件文件名,不包括扩展名。
* eg: getBaseName("j:/hexuzhong.jpg"); //返回 hexuzhong
*
* @param String $filename 给定要取文件名的文件
* @access private
* @return String 返回文件名
*/
function getBaseName($filename, $type) {
$basename = basename($filename, $type);
return $basename;
}
}
/**//******************** UploadFile类使用注释
//注意,上传组件name属性不管是一个还是多个都要使用数组形式,如:
<input type="file" name="user_upload_file[]">
<input type="file" name="user_upload_file[]">
//如果用户点击了上传按钮。
if ($_POST['action'] == "上传") {
//设置允许用户上传的文件类型。
$type = array('gif', 'jpg', 'png', 'zip', 'rar');
//实例化上传类,第一个参数为用户上传的文件组、第二个参数为存储路径、
//第三个参数为文件最大大小。如果不填则默认为2M
//第四个参数为充许用户上传的类型数组。如果不填则默认为gif, jpg, png, zip, rar, txt, doc, pdf
$upload = new UploadFile($_FILES['user_upload_file'], 'j:/tmp', 100000, $type);
//上传用户文件,返回int值,为上传成功的文件个数。
$num = $upload->upload();
if ($num != 0) {
echo "上传成功<br>";
//取得文件的有关信息,文件名、类型、大小、路径。用print_r()打印出来。
print_r($upload->getSaveInfo());
//格式为: Array
// (
// [0] => Array(
// [name] => example.txt
// [type] => txt
// [size] => 526
// [path] => j:/tmp/example-1108898806.txt
// )
// )
echo $num."个文件上传成功";
}
else {
echo "上传失败<br>";
}
}
*/
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP网络编程技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
# PHP
# 多文件
# 上传类
# 文件上传
# PHP实现单文件、多个单文件、多文件上传函数的封装示例
# PHP Laravel 上传图片、文件等类封装
# 封装ThinkPHP的一个文件上传方法实例
# php封装的单文件(图片)上传类完整实例
# PHP实现原生态图片上传封装类方法
# php封装单文件上传到数据库(路径)
# PHP实现将上传图片自动缩放到指定分辨率
# 并保持清晰度封装类示例
# PHP 一个比较完善的简单文件上传
# PHP单文件上传原理及上传函数的封装操作示例
# 上传
# 上传文件
# 扩展名
# 是否合法
# 多个
# 默认为
# 文件扩展名
# 程序设计
# 不合法
# 是一个
# 相关内容
# 第一个
# 都要
# 本类
# 感兴趣
# 第二个
# 给大家
# 相关信息
# 第三个
相关文章:
如何快速查询网站的真实建站时间?
建站主机CVM配置优化、SEO策略与性能提升指南
如何用西部建站助手快速创建专业网站?
建站之星云端配置指南:模板选择与SEO优化一键生成
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
建站之星安装模板失败:服务器环境不兼容?
已有域名和空间如何快速搭建网站?
如何选择高效便捷的WAP商城建站系统?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
建站主机类型有哪些?如何正确选型
黑客如何利用漏洞与弱口令入侵网站服务器?
建站之星Pro快速搭建教程:模板选择与功能配置指南
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
如何高效配置香港服务器实现快速建站?
PHP 500报错的快速解决方法
建站之星图片链接生成指南:自助建站与智能设计教程
如何在景安云服务器上绑定域名并配置虚拟主机?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
官网网站制作腾讯审核要多久,联想路由器newifi官网
C#怎么使用委托和事件 C# delegate与event编程方法
C++中引用和指针有什么区别?(代码说明)
如何在万网自助建站平台快速创建网站?
如何在阿里云ECS服务器部署织梦CMS网站?
广州商城建站系统开发成本与周期如何控制?
高端建站三要素:定制模板、企业官网与响应式设计优化
c# 在ASP.NET Core中管理和取消后台任务
如何在万网自助建站中设置域名及备案?
网站制作服务平台,有什么网站可以发布本地服务信息?
javascript中的try catch异常捕获机制用法分析
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
详解jQuery停止动画——stop()方法的使用
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
公司门户网站制作流程,华为官网怎么做?
已有域名和空间如何搭建网站?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
制作企业网站建设方案,怎样建设一个公司网站?
高端云建站费用究竟需要多少预算?
如何在建站之星网店版论坛获取技术支持?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
建站之星后台管理:高效配置与模板优化提升用户体验
历史网站制作软件,华为如何找回被删除的网站?
如何在服务器上三步完成建站并提升流量?
如何通过老薛主机一键快速建站?
香港服务器选型指南:免备案配置与高效建站方案解析
ui设计制作网站有哪些,手机UI设计网址吗?
图册素材网站设计制作软件,图册的导出方式有几种?
小型网站建站如何选择虚拟主机?
如何在IIS7中新建站点?详细步骤解析
定制建站方案优化指南:企业官网开发与建站费用解析
如何通过商城自助建站源码实现零基础高效建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。