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 相关文章推荐
PHP3 safe_mode 失效漏洞
Oct 09 PHP
php 小乘法表实现代码
Jul 16 PHP
php中的观察者模式
Mar 24 PHP
深入PHP异步执行的详解
Jun 03 PHP
php权重计算方法代码分享
Jan 09 PHP
php的ajax简单实例
Feb 27 PHP
linux使用crontab实现PHP执行计划定时任务
May 10 PHP
php递归法读取目录及文件的方法
Jan 30 PHP
php实现文本数据导入SQL SERVER
May 17 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
Sep 20 PHP
基于php双引号中访问数组元素报错的解决方法
Feb 01 PHP
php redis setnx分布式锁简单原理解析
Oct 23 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 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
php中return的用法实例分析
2015/02/28 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
Python实现学校管理系统
2018/01/11 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
python程序控制NAO机器人行走
2019/04/29 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
python 获取计算机的网卡信息
2021/02/18 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
总经理职责范文
2013/11/08 职场文书
医药专业推荐信
2013/11/15 职场文书
工作违纪检讨书
2014/02/17 职场文书
开工仪式主持词
2014/03/20 职场文书
个人授权委托书
2014/04/03 职场文书
个人授权委托书范本
2014/04/03 职场文书
大二学习计划书范文
2014/04/27 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
股东出资证明书范例
2014/10/04 职场文书
停课通知书
2015/04/24 职场文书
党支部考察意见范文
2015/06/02 职场文书
教师节简报
2015/07/20 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python