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实现Ftp用户的在线管理
Feb 16 PHP
php中将html中的br换行符转换为文本输入中的换行符
Mar 26 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Oct 29 PHP
php新浪微博登录接口用法实例
Dec 23 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
PHP支付宝当面付2.0代码
Dec 21 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
May 05 PHP
php新建文件的方法实例
Sep 26 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
PHP读取MySQL数据代码
2008/06/05 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
PHP简单日历实现方法
2016/07/20 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
YII框架常用技巧总结
2019/04/27 PHP
JS实现的省份级联实例代码
2013/06/24 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python实现梯度下降算法
2020/03/24 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
python如何停止递归
2020/09/09 Python
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
中国好声音华少广告词
2014/03/17 职场文书
党员干部一句话承诺
2014/05/30 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
经理岗位职责
2015/02/02 职场文书
《司马光》教学反思
2016/02/22 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript