Home  >  Article  >  Backend Development  >  The latest PHP file upload model, supports multiple file upload_PHP tutorial

The latest PHP file upload model, supports multiple file upload_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:45:22823browse

复制代码 代码如下:

class UploadModel
{
protected $keys;
protected $err = array();
protected $target;
protected $exts;
protected $maxSize;
protected $randName;
protected $files = array();
/**
* Initialize variables
*/
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();
}
/**
* Get the name of file
*/
protected function getKeys()
{
$keys = array_keys($_FILES);
return $keys;
}
/**
* Set different types of variables
*/
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;
}
}
/**
* Move the uploaded file to the specified directory
* @param $fileName When moving a single file name, rename the uploaded file
*/
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);
}
}
}
/**Internal processing of uploaded files*/
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;
}
}
/**
* Whether it is an uploadable file type
* @param $file file object
*/
public function checkExt($file)
{
if(!in_array($this->getExt($file['name']), $this->exts))
{
$this->err[] = $file['name'].':ext';
return false;
}
else {
return true;
}
}
/**
* Get the file suffix name
*/
public function getExt($fileName)
{
$pos = strrpos($fileName, '.')+1;
return substr($fileName, $pos);
}
/**
* Check if the file size is legal
*/
public function checkSize($file)
{
if($size > $this->maxSize)
{
$this->err[] = $file['name'].':max';
return false;
}
else {
return true;
}
}
/**
* Get the name of the uploaded file
*/
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);

Usage example in MayFish:
Copy code The code is as follows:

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');
}

Front-end code:
Copy code The code is as follows:





Untitled Document










www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/320385.htmlTechArticleCopy the code as follows: ?php class UploadModel { protected $keys; protected $err = array(); protected $ target; protected $exts; protected $maxSize; protected $randName; protecte...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn