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
测试您的 PHP 水平的题目
May 30 PHP
php xml 入门学习资料
Jan 01 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
PDO::rollBack讲解
Jan 29 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 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
JAVA/JSP学习系列之二
2006/10/09 PHP
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
JavaScript 中的六种循环方法
2021/01/06 Javascript
Python编程实现的简单神经网络算法示例
2018/01/26 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
详解Python中第三方库Faker
2020/09/25 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
体育教育毕业生自荐信
2013/11/21 职场文书
小学教师办公室制度
2014/02/03 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
总经理岗位职责范本
2015/04/01 职场文书
确保工程质量承诺书
2015/04/29 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
python opencv旋转图片的使用方法
2021/06/04 Python
python3 字符串str和bytes相互转换
2022/03/23 Python