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 相关文章推荐
基于python发送邮件的乱码问题的解决办法
Apr 25 PHP
PHP实现多进程并行操作的详解(可做守护进程)
Jun 18 PHP
详解PHP中strlen和mb_strlen函数的区别
Mar 07 PHP
PHP写日志的实现方法
Nov 05 PHP
PHP也能干大事 随机函数
Apr 14 PHP
Smarty模板变量调节器用法分析
May 23 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 PHP
php递归函数怎么用才有效
Feb 24 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 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的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
PHP异常处理浅析
2015/05/12 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
php中序列化与反序列化详解
2017/02/13 PHP
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
使用Python中的cookielib模拟登录网站
2015/04/09 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
客服工作职责
2013/12/11 职场文书
秋天的雨教学反思
2014/04/27 职场文书
应聘会计求职信
2014/06/11 职场文书
学校读书活动总结
2014/06/30 职场文书
实习单位证明范例
2014/11/17 职场文书
打架检讨书范文
2015/01/27 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书