php上传文件的增强函数


Posted in PHP onJuly 21, 2010

表单中file对象,比如说$_FILES['doc'],$path为保存的路径,$type为限制上传的类型(他是一个数组,比如说限制上传doc和docx和格式,那这个参数可以填array(“doc”,”.docx”),而且扩展名前有无”.”不作要求)。

<?php 
function upload($file,$path,$type){ 
$state = array(); 
$state['error'] = "true"; 
$alltype = ""; // 所有可以上传的类型,用"/"连接起来 
$path = trim($path); 
//为$path末尾加上"/" 
if(strlen(strrchr($path,‘/‘)) <= 1){ 
$path .= "/"; 
} 
//为类型加上开头“.” 
//将所有类型合成字符串,用"/"连接起来<span id="more-78"></span> 
foreach($type as $key=>$typeone){ 
$type[$key] = $typeone = trim($typeone); 
if(strlen(strchr($typeone,".")) != strlen($typeone)){ 
$type[$key] = ".".$typeone;} 
$alltype .= $typeone.‘/‘; 
} 
$alltype = substr($alltype,0,strlen($alltype)-1); //去掉最后的“/” 
if(empty($file['name'])){ 
$state['error'] = "没有上传{$alltype}类型文件!"; 
$state['errorid'] = 8; 
return $state; 
} else { 
if (!$file['error']) { 
$state['name'] = $file['name']; 
$state['type'] = strrchr($state['name'],‘.‘); 
if(in_array($state['type'],$type)){ 
$time = date("U"); 
$state['upname'] = $time.rand(1000,9999).$state['type']; //文件命名 
if(copy($file['tmp_name'],$path.$state['upname'])){ 
$state['time'] = date("U"); //上传的时间 
$state['error'] = false; 
return $state; 
} else { 
switch($file(‘error‘)){ 
case 1: $state['error'] = $state['name']."上传失败,文件大小超出了服务器的空间大小!";$state['errorid'] = 1;return $state; 
case 2: $state['error'] = $state['name']."上传失败,要上传的文件大小超出浏览器限制!";$state['errorid'] = 2;return $state; 
case 3: $state['error'] = $state['name']."上传失败,文件仅部分被上传!";$state['errorid'] = 3;return $state; 
case 4: $state['error'] = $state['name']."上传失败,没有找到要上传的文件!";$state['errorid'] = 4;return $state; 
case 5: $state['error'] = $state['name']."上传失败,服务器临时文件夹丢失!";$state['errorid'] = 5;return $state; 
case 6: $state['error'] = $state['name']."上传失败,文件写入到临时文件夹出错!";$state['errorid'] = 6;return $state; 
default: $state['error'] = $state['name']."上传失败,位置错误!";$state['errorid'] = 10;return $state; 
} 
} 
} else { 
$state['error'] = $state['name']."上传失败!不符合所要上传的文件类型!({$alltype})"; 
$state['errorid'] = 10; 
return $state; 
} 
} 
} 
?>

返回值为一数组
$key value
error 错误详情
errorid 错误id(出现错误才有值)
type 文件扩展名(扩展名前带“.”)
upname 上传的文件名
time 上传的时间(从 Unix 纪元(1970-01-01 00:00)开始至今的秒数)

错误类型
errorid error
false //上传成功
1 上传失败,文件大小超出了服务器的空间大小!
2 上传失败,要上传的文件大小超出浏览器限制!
3 上传失败,文件仅部分被上传!
4 上传失败,没有找到要上传的文件!
5 上传失败,服务器临时文件夹丢失!
6 上传失败,文件写入到临时文件夹出错!
8 没有上传该类型文件! //表单中file对象为空
10 上传失败,位置错误!

PHP 相关文章推荐
用PHP制作静态网站的模板框架(一)
Oct 09 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
Mar 29 PHP
PHP文件操作实现代码分享
Sep 01 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
php文件缓存类汇总
Nov 21 PHP
php从字符串创建函数的方法
Mar 16 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
php批量删除操作(数据访问)
May 23 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
Aug 30 PHP
php 模拟POST|GET操作实现代码
Jul 20 #PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 #PHP
PHP连接SQLServer2005 的问题解决方法
Jul 19 #PHP
在Windows系统上安装PHP运行环境文字教程
Jul 19 #PHP
ajax实现无刷新分页(php)
Jul 18 #PHP
php将会员数据导入到ucenter的代码
Jul 18 #PHP
php 无限级数据JSON格式及JS解析
Jul 17 #PHP
You might like
S900/ ETON E1-XM 收音机
2021/03/02 无线电
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
php时间戳转换代码详解
2019/08/04 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
django表单的Widgets使用详解
2019/07/22 Python
Python tkinter常用操作代码实例
2020/01/03 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
班主任对学生的评语
2014/04/26 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
交通安全学习心得体会
2016/01/18 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL