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通用检测函数集合
Nov 25 PHP
PHP中for循环语句的几种变型
Nov 26 PHP
追求程序速度,而不是编程的速度
Apr 23 PHP
自动把纯文本转换成Web页面的php代码
Aug 27 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
实例介绍PHP的Reflection反射机制
Aug 05 PHP
php读取文件内容到数组的方法
Mar 16 PHP
php简单操作mysql数据库的类
Apr 16 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
Jan 15 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 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
编写自己的php扩展函数
2006/10/09 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
php提取微信账单的有效信息
2018/10/01 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
深入理解Python中的元类(metaclass)
2015/02/14 Python
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
Java基础面试题
2014/07/19 面试题
电子信息毕业生自荐信
2013/11/16 职场文书
小班秋游活动方案
2014/02/22 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
预防传染病方案
2014/06/14 职场文书
交通违章检讨书
2014/09/21 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技