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守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
php实现算术验证码功能
Dec 05 PHP
PHP命名空间简单用法示例
Dec 28 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
Apr 12 PHP
PHP实现的文件浏览器功能简单示例
Sep 12 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
用文本作数据处理
2006/10/09 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
Javascript UrlDecode函数代码
2010/01/09 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
Python导入txt数据到mysql的方法
2015/04/08 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
三年级音乐教学反思
2014/01/28 职场文书
《小石潭记》教学反思
2014/02/13 职场文书
户外活动策划方案
2014/03/12 职场文书
学校安全责任书范本
2014/07/23 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
mysql如何查询连续记录
2022/05/11 MySQL