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
在线增减.htpasswd内的用户
Oct 09 PHP
php 表单验证实现代码
Mar 10 PHP
学习php笔记 字符串处理
Oct 19 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
解析php取整的几种方式
Jun 25 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 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/16 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
php简单日历函数
2015/10/28 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
JS 表单验证大全
2011/11/23 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
元旦红领巾广播稿
2014/02/19 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
幼儿园课题方案
2014/06/09 职场文书
销售员岗位职责
2015/02/10 职场文书
垂直极限观后感
2015/06/08 职场文书
生产设备维护保养制度
2015/08/06 职场文书
消防演习感想
2015/08/10 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
Python获取字典中某个key的value
2022/04/13 Python