当前位置: 首页 > 图文教程 > 网络编程 > PHP > 最新的php 文件上传模型,支持多文件上传

PHP
PHP 开发环境的选择、建立及使用(5)
PHP 开发环境的选择、建立及使用(6)
PHP 开发环境的选择、建立及使用(7)
PHP 开发环境的选择、建立及使用(8)
PHP 开发环境的选择、建立及使用(9)
Win2003下APACHE PHP5 MYSQL4 PHPMYADMIN 的简易安装配置
PHP新手上路(八) 文件上传
PHP新手上路(九) 投票系统
PHP新手上路(十) 简易banner动态更替
PHP新手上路(十一) 数据库链接
PHP新手上路(十二)使用PHP来操作Oracle数据库
PHP新手上路(十三)PHP资源
PHP新手上路(十四) 其他杂项
session全教程(一)
session全教程(二)
session全教程(三)
PHP编码规范
第十五节--Zend引擎的发展 -- Classes and Objects in PHP5 [15]
第十四节--命名空间 -- Classes and Objects in PHP5 [14]
第十二节--类的自动加载 -- Classes and Objects in PHP5 [12]

PHP 中的 最新的php 文件上传模型,支持多文件上传


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 61 ::
收藏到网摘: n/a

为 MayFish 重新封装的一个文件上传类,支持多个文件同时上传,设置允许的上传文件类型和文件大小。
复制代码 代码如下:

<?php
class UploadModel
{
protected $keys;
protected $err = array();
protected $target;
protected $exts;
protected $maxSize;
protected $randName;
protected $files = array();
/**
* 初始化变量
*/
public function __construct()
{
$this->exts = array('jpeg','jpg','gif','png','zip','rar');
$this->maxSize = 1024*1024*2;
$this->target = dirname(__FILE__) . '/upload/';
$this->randName = true;
$this->keys = $this->getKeys();
}
/**
* 获取 file 的名称
*/
protected function getKeys()
{
$keys = array_keys($_FILES);
return $keys;
}
/**
* 设置不同类型的变量
*/
public function __set($name, $value)
{
$property = array('target','exts','maxSize','randName');
if(!in_array($name, $property)) return false;
switch(strval($name))
{
case 'target':
$this->$name = Configure::read('app_path') . $value;
break;
case 'exts':
$this->$name = explode(',', $value);
break;
case 'randName':
if($value === true || $value == 1)
{
$this->$name = true;
}
else {
$this->$name = false;
}
break;
default:
$this->$name = $value;
}
}
/**
* 移动上传的文件到指定的目录
* @param $fileName 移动单个文件名称的时候,对上传的文件重新命名
*/
public function save($fileName)
{
$this->err = array();
$this->files = array();
if(!file_exists($this->target)) {
mkdir($this->target);
chmod($this->target, 0777);
}
foreach($this->keys as $key)
{
if(is_array($_FILES[$key]['name']))
{
$count = count($_FILES[$key]['name']);
for($i=0; $i<$count; $i++)
{
$keys = array_keys($_FILES[$key]);
foreach($keys as $item)
{
$file[$item] = $_FILES[$key][$item][$i];
}
$this->upload($file, $fileName);
}
return (count($this->err) > 0)? false:true;
}
else {
return $this->upload($_FILE[$key], $fileName);
}
}
}
/** 内部处理上传文件的过程 */
protected function upload($file, $fileName)
{
if(!is_uploaded_file($file['tmp_name'])) return false;
if(!$this->checkExt($file)) return false;
if(!$this->checkSize($file)) return false;
if($this->randName)
{
$newFileName = $this->target . date('YmdHis', time()) . rand(0,9) . '.' . $this->getExt($file['name']);
}
elseif(emptyempty($fileName))
{
$newFileName = $this->target . '/' . $file['name'];
}
else {
$newFileName = $this->target . '/' . $fileName;
}
$result = move_uploaded_file($file['tmp_name'], $newFileName);
if(!$result)
{
return false;
}
else {
$this->files[] = str_replace($this->target, $newFileName);
return true;
}
}
/**
* 是否是可上传的文件类型
* @param $file 文件对象
*/
public function checkExt($file)
{
if(!in_array($this->getExt($file['name']), $this->exts))
{
$this->err[] = $file['name'].':ext';
return false;
}
else {
return true;
}
}
/**
* 获取文件后缀名
*/
public function getExt($fileName)
{
$pos = strrpos($fileName, '.')+1;
return substr($fileName, $pos);
}
/**
* 检查文件大小是否合法
*/
public function checkSize($file)
{
if($size > $this->maxSize)
{
$this->err[] = $file['name'].':max';
return false;
}
else {
return true;
}
}
/**
* 取得已经上传的文件名称
*/
public function getFiles()
{
return $this->files;
}
}

使用实例:
复制代码 代码如下:

include 'uploaded.model.php';
$U = new UploadModel();
$U->target = '/tmp/';
$U->exts = 'jpg,gif';
$U->maxSize = 1024*275; //275KB
$U->save();
$files = $U->getFiles();
print_r($files);
include 'uploaded.model.php';
$U = new UploadModel();
$U->target = '/tmp/';
$U->exts = 'jpg,gif';
$U->maxSize = 1024*275; //275KB
$U->save();
$files = $U->getFiles();
print_r($files);

在 MayFish 里的使用实例:
复制代码 代码如下:

public function up()
{
$U = M('SYS', 'upload');
$U->target = '/tmp/';
$U->exts = 'jpg,gif';
$U->maxSize = 1024*275; //275KB
$U->save();
header('Location:/?a=upload');
}
public function up()
{
$U = M('SYS', 'upload');
$U->target = '/tmp/';
$U->exts = 'jpg,gif';
$U->maxSize = 1024*275; //275KB
$U->save();
header('Location:/?a=upload');
}

前台代码:
复制代码 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
<form action="/?a=up" method="post" enctype="multipart/form-data">
<!-- 以下两上file类型控制的name属性可以任意设置,系统会自己取出input 的名称 -->
<input name="files[]" type="file" size="30" />
<input name="files[]" type="file" size="30" />
<input type="submit" value="开始上传" />
</form>
</body>
</html>