手机
当前位置:查字典教程网 >编程开发 >php教程 >最新的php 文件上传模型,支持多文件上传
最新的php 文件上传模型,支持多文件上传
摘要:复制代码代码如下:无标题文档

复制代码 代码如下:

<?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">

<>

<input name="files[]" type="file" size="30" />

<input name="files[]" type="file" size="30" />

<input type="submit" value="开始上传" />

</form>

</body>

</html>

【最新的php 文件上传模型,支持多文件上传】相关文章:

php删除文本文件中重复行的方法

用PHP实现文件上传二法

建立文件交换功能的脚本(一)

多文件上传的例子

写一段简单的PHP建立文件夹代码

php实现CSV文件导入和导出方法

php准确获取文件MIME类型的方法

简单解决新浪SAE无法上传文件的问题

php从文件夹随机读取文件的方法

php计算给定时间之前的函数用法实例

精品推荐
分类导航