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 相关文章推荐
最小化数据传输――在客户端存储数据
Oct 09 PHP
PHP新手上路(十三)
Oct 09 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php5.3 废弃函数小结
May 16 PHP
php中的三元运算符使用说明
Jul 03 PHP
php中hashtable实现示例分享
Feb 13 PHP
php实现CSV文件导入和导出
Oct 24 PHP
PHP引用的调用方法分析
Apr 25 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
PHP PDOStatement::setFetchMode讲解
Feb 03 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
Zend Framework数据库操作技巧总结
2017/02/18 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
Date对象格式化函数代码
2010/07/17 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
优秀应届毕业生自荐信
2013/11/16 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2014年客房部工作总结
2014/11/22 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python