PHP5+UTF8多文件上传类


Posted in PHP onOctober 17, 2008

还有些功能没有加上去,如自动更名,图片处理等.可根据需要自己添加.
USE:
$up = new upfile(ROOT_PATH.'data/'.date("Ym",time()),array('gif','jpg','jpeg'),true);
$fileimg = $up->upload($_FILES['img']);//返回上传后文件名数组,$_FILES['img']为上传的文件
可使用$up->log查看上传时信息.
<?php
//====================================================
// FileName: upfile.class.php
// Summary: 文件上传类
// Author: millken(迷路林肯)
// LastModifed: 2008-6-4
// copyright (c)2008 millken@gmail.com
//====================================================
if(!defined('OK'))exit(__FILE__.'Access Denied');
class upfile {
public $ExtensionFileFormat = array();
public $returninfo = array();
private $ImageFileFormat = array('gif','bmp','jpg','jpe','jpeg','png');
private $OtherFileFormat = array('zip','pdf','rar','xls','doc','ppt','csv');
private $savePath;
private $attachment_path = './upfiles/';
private $overwrite = false; # 同名时是否覆盖
private $maxSize = 0; # 文件最大字节,为0时不限制大小
private $ext;
private $errno = 0;
/* 构造函数
* (string)$savePath 文件保存路径,默认为$attachment_path
* (array)$extensionFileFormat 自定义上传文件的扩展名,未设置时为$ImageFileFormat || $OtherFileFormat
* (bool)$overwrite 是否覆盖同名文件
*/
public function __construct($savePath='',$extensionFileFormat = array(),$overwrite = false) {
$this->savePath = empty($savePath)?$this->attachment_pathsavePath.'/';
$this->extensionFileFormat = is_array($extensionFileFormat)?$extensionFileFormat:array();
$this->overwrite = is_bool($overwrite)?$overwrite:false;
}
/*上传函数
* (array)$files 待上传的文件数组$_FILES['attach']
* (number)$maxSize 文件的最大字节数,默认为0不限制上传大小
*/
public function upload($files,$maxSize=0) {
$this->maxSize = is_numeric($maxSize)?$maxSize:0;
if(isset($files) && is_array($files)) {
if(is_array($files['name'])) {
foreach($files as $key => $var) {
foreach($var as $id => $val) {
$attachments[$id][$key] = $val;
}
}
} else {
$attachments[] = $files;
}
}
self::check_file_type($attachments);
if(empty($this->filelist)) {
$this->log .= "待上传的文件列表为空。\n";
return array();
}
if(!self::makeDirectory() || !@is_writable($this->savePath)) {
$this->log .= $this->savePath . "不能创建或其权限为不可写。\n";
return array();
}
$filearray = array();
foreach($this->filelist as $k=>$f) {
if($this->maxSize && $f['size']>$this->maxSize) {
$this->log .= $f['name'] . "其大小超过了设定的值:" . $this->maxSize ."\n";
}elseif($this->overwrite == false && file_exists($this->savePath . $f['name'])) {
$this->log .= $f['name'] . "已经存在于目录:" . $this->savePath . "\n";
}else{
@unlink($this->savePath . $f['name']);
if(@move_uploaded_file($f['tmp_name'],$this->savePath . mb_convert_encoding($f['name'],'gbk','utf-8'))) {//如果不进行编码转换,中文将无法支持
$this->log .= $f['name'] . "成功上传到目录:". $this->savePath ."\n";
$filearray[$k] = $this->savePath . $f['name'];
}else{
$this->log .= $f['name'] . "上传失败。\n";
}
}
}
return $filearray;
}
/*检测文件的类型
*(array)$files 文件数组
*/
private function check_file_type($files) {
$this->filelist = array();
foreach($files as $key=>$file) {
if($file['error'] == 0) {
$ext = strtolower(substr($file['name'], strrpos($file['name'], '.') + 1));
$str = @file_get_contents($file['tmp_name'],FALSE,NULL,0,20);
if((in_array($ext,array('jpg','jpeg')) && substr($str ,0, 3) !== "\xFF\xD8\xFF") || ($ext == 'gif' && substr($str ,0, 4) !== 'GIF8') || ($ext == 'png' && substr($str ,0, 8) !== "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") || ($ext == 'bmp' && substr($str ,0, 2) !== 'BM') || ($ext == 'swf' && (substr($str ,0, 3) !== 'CWS' || substr($str ,0, 3) !== 'FWS')) || ($ext == 'zip' && substr($str ,0, 4) !== "PK\x03\x04") || ($ext == 'rar' && substr($str ,0, 4) !== 'Rar!') || ($ext == 'pdf' && substr($str ,0, 4) !== "\x25PDF") || ($ext == 'chm' && substr($str ,0, 4) !== 'ITSF') || ($ext == 'rm' && substr($str ,0, 4) !== "\x2ERMF") || ($ext == 'exe' && substr($str ,0, 2) !== "MZ") || (in_array($ext,array('doc','xls','ppt')) && substr($str ,0, 4) !== "\xD0\xCF\x11\xE0")) {
$this->log .= $file['name'] . "文件类型与文件内容不符合。\n";
}elseif((!empty($this->extensionFileFormat) && in_array($ext,$this->extensionFileFormat)) || (empty($this->extensionFileFormat) && (in_array($ext,$this->ImageFileFormat) || in_array($ext,$this->OtherFileFormat)))) {
$this->filelist[$key] = $file;
}else{
$this->log .= $file['name'] . "不符合上传文件的类型。\n";
@unlink($file['tmp_name']);
}
}
}
}
/*生成上传目录
*
*/
private function makeDirectory() {
$directoryName = str_replace("\\","/", $this->savePath);
$dirNames = explode('/', $directoryName);
$total = count($dirNames);
$temp = '';
for($i=0; $i<$total; $i++)
{
$temp .= $dirNames[$i].'/';
if (!is_dir($temp))
{
$oldmask = @umask(0);
if (!@mkdir($temp, 0777)) return false;
@umask($oldmask);
}
};
if(is_dir($this->savePath)) {
return true;
} else {
return false;
};
}
}
?>

PHP 相关文章推荐
在PHP中利用XML技术构造远程服务(上)
Oct 09 PHP
PHP新手上路(九)
Oct 09 PHP
PHP中获取变量的变量名的一段代码的bug分析
Jul 07 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
深入PHP nl2br()格式化输出的详解
Jun 05 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
php截取视频指定帧为图片
May 16 PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 PHP
PHP抽象类与接口的区别实例详解
May 09 PHP
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
Oct 13 #PHP
PHP中str_replace函数使用小结
Oct 11 #PHP
php preg_match_all结合str_replace替换内容中所有img
Oct 11 #PHP
php email邮箱正则
Oct 08 #PHP
php获取地址栏信息的代码
Oct 08 #PHP
Cannot modify header information错误解决方法
Oct 08 #PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 #PHP
You might like
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
iView框架问题整理小结
2018/10/16 Javascript
详解如何用webpack4从零开始构建react开发环境
2019/01/27 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
python turtle 绘制太极图的实例
2019/12/18 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
小区门卫岗位职责
2013/12/31 职场文书
满月酒答谢词
2014/01/14 职场文书
老公爱的承诺书
2014/03/31 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
经营理念口号
2014/06/21 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
职工年度考核评语
2014/12/31 职场文书
初中英语教学反思范文
2016/02/15 职场文书
门面租赁合同范文
2019/08/06 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers