复制代码代码如下:
class UploadModel
{
protected $keys;
保護された $err = array();
保護された $target;
保護された $exts;
保護された $maxSize;
保護された$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__) 。 '/アップロード/';
$this->randName = true;
$this->keys = $this->getKeys();
}
/**
* ファイル名を取得します
*/
保護関数 getKeys()
{
$keys = array_keys($_FILES);
$keys を返します;
}
/**
* さまざまな型の変数を設定します
*/
パブリック関数 __set($name, $value)
{
$property = array('target','exts','maxSize','randName');
if(!in_array($name, $property)) false を返します。
switch(strval($name))
{
case 'target':
$this->$name = Configure::read('app_path') 。 $値;
休憩;
case 'exts':
$this->$name =explode(',', $value);
休憩;
case 'randName':
if($value === true || $value == 1)
{
$this->$name = true;
}
else {
$this->$name = false;
}
休憩;
デフォルト:
$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->ターゲット, 0777);
}
foreach($this->keys as $key)
{
if(is_array($_FILES[$key]['name']))
{
$count = count($_FILES[$key][ '名前']);
for($i=0; $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)?真偽;
}
else {
return $this->upload($_FILE[$key], $fileName);
}
}
}
/**アップロードされたファイルの内部処理*/
保護された関数 Upload($file, $fileName)
{
if(!is_uploaded_file($file['tmp_name'])) return false;
if(!$this->checkExt($file)) は false を返します。
if(!$this->checkSize($file)) は false を返します。
if($this->randName)
{
$newFileName = $this->target . date('YmdHis', time()) 。 rand(0,9) 。 「。」 。 $this->getExt($file['name']);
}
elseif(emptyempty($fileName))
{
$newFileName = $this->target . '/' 。 $ファイル['名前'];
}
else {
$newFileName = $this->target . '/' 。 $ファイル名;
}
$result = move_uploaded_file($file['tmp_name'], $newFileName);
if(!$result)
{
return false;
}
else {
$this->files[] = str_replace($this->target, $newFileName);
true を返します。
}
}
/**
* アップロード可能なファイルタイプかどうか
* @param $file ファイルオブジェクト
*/
パブリック関数 checkExt($file)
{
if(!in_array($this->getExt($file['name']), $this-> exts))
{
$this->err[] = $file['name'].':ext';
false を返します。
}
else {
true を返します。
}
}
/**
* ファイル拡張子を取得します
*/
パブリック関数 getExt($fileName)
{
$pos = strrpos($fileName, '.')+1;
return substr($fileName, $pos);
}
/**
* ファイルサイズが適切かどうかを確認してください
*/
public function checkSize($file)
{
if($size > $this->maxSize)
{
$this->err[] = $file[ '名前'].':max';
false を返します。
}
else {
true を返します。
}
}
/**
* アップロードされたファイルの名前を取得します
*/
public function getFiles()
{
return $this->files;
}
}
使用例:
复制代码代码如下:
include 'uploaded.model.php';
$U = 新しい UploadModel();
$U->ターゲット = '/tmp/';
$U->exts = 'jpg,gif';
$U->maxSize = 1024*275; //275KB
$U->save();
$files = $U->getFiles();
print_r($files);
「uploaded.model.php」をインクルードします。
$U = 新しい UploadModel();
$U->ターゲット = '/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'); - >ターゲット = '/tmp/';
$U->exts = 'jpg,gif';
$U->maxSize = 1024*275
$U->save();
header('Location:/?a=upload');
}
public function up()
{
$U = M('SYS', 'upload');
$U->target = '/tmp / ';
$U->exts = 'jpg,gif';
$U->maxSize = 1024*275;
$U->save(); a =upload');
}
フロントエンド コード:
コードをコピー コードは次のとおりです:
true
http://www.bkjia.com/PHPjc/320385.html技術記事次のようにコードをコピーします。