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令牌 Token改进版
Jul 18 PHP
PHP 文件类型判断代码
Mar 13 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
修改php.ini以达到屏蔽错误信息并记录日志
Jun 16 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
PHP7正式版测试,性能惊艳!
Dec 08 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
thinkPHP框架中执行事务的方法示例
May 31 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
php生成短网址/短链接原理和用法实例分析
May 29 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
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
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
在JavaScript中使用timer示例
2014/05/08 Javascript
Javascript window对象详解
2014/11/12 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
javascript连续赋值问题
2015/07/08 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python计算两个地址之间的距离方法
2018/06/09 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
Python get获取页面cookie代码实例
2018/09/12 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
Html5元素及基本语法详解
2016/08/02 HTML / CSS
原材料检验岗位职责
2014/03/15 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
年会邀请函范文
2015/01/30 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书