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+mysql来做一个功能强大的在线计算器
Oct 12 PHP
php expects parameter 1 to be resource, array given 错误
Mar 23 PHP
php动态实现表格跨行跨列实现代码
Nov 06 PHP
深入php socket的讲解与实例分析
Jun 13 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
分享一段php获取linux服务器状态的代码
May 27 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
Dec 31 PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
关于Yii中模型场景的一些简单介绍
Sep 22 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 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 命名空间实例说明
2011/01/27 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
python实现类的静态变量用法实例
2015/05/08 Python
python操作列表的函数使用代码详解
2017/12/28 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
人事档案接收函
2014/01/12 职场文书
群众路线剖析材料
2014/02/02 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
高中军训感言800字
2014/03/05 职场文书
分公司经理任命书
2014/06/05 职场文书
销售员岗位职责
2014/06/09 职场文书
先进集体申报材料
2014/12/25 职场文书
写给医生的感谢信
2015/01/22 职场文书
2015年司法所工作总结
2015/04/27 职场文书
关于 Python json中load和loads区别
2021/11/07 Python
解决 redis 无法远程连接
2022/05/15 Redis