最新的php 文件上传模型,支持多文件上传
前端之家收集整理的这篇文章主要介绍了
最新的php 文件上传模型,支持多文件上传,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<div class="codetitle"><a style="CURSOR: pointer" data="65113" class="copybut" id="copybut65113" onclick="doCopy('code65113')"> 代码如下:
<div class="codebody" id="code65113">
<?
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 = 102410242;
$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;
}
}