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 最大运行时间 max_execution_time修改方法
Mar 08 PHP
解析PHP中如何将数组变量写入文件
Jun 06 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
Dec 25 PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
Laravel5权限管理方法详解
Jul 26 PHP
PHP实现的观察者模式实例
Jun 21 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 PHP
php用户名的密码加密更安全的方法
Jun 21 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 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 金额数字转换成英文
2010/05/06 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
javascript StringBuilder类实现
2008/12/22 Javascript
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
js模拟类继承小例子
2010/07/17 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
Python深度优先算法生成迷宫
2018/01/22 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
python文字转语音实现过程解析
2019/11/12 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
Python中实现输入一个整数的案例
2020/05/03 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
幼教求职信
2014/03/12 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
产品委托授权书范本
2014/09/16 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书