ホームページ > バックエンド開発 > PHPチュートリアル > thinkphp ファイルアップロードクラス

thinkphp ファイルアップロードクラス

WBOY
リリース: 2016-08-08 09:31:41
オリジナル
1061 人が閲覧しました

/**
*これは、アップロードされたファイルや写真などを処理するために使用されるファイルアップロードクラスであり、サムネイルを自動的に生成し、ウォーターマークを追加できます
*/
// +--------------------------------- ----------------------------------------
// ThinkPHP [ 私たちにはそれができますちょっと考えてみてください ]
// +------------------------------------------ ------ ------------------------
// 著作権 (c) 2009 http://thinkphp.cn すべての権利予約済みです。
// +- -------------------------------------- ------- ------------------
// ライセンス済み ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----- -------------------------------------------- ------ ---------------
// 作成者: hxsml
// +------ --- --------------------------------------------------- ---
// $ Id: UploadFile.class.php v1.0
/**
+------------------------------------------------ ----------------------------------
* ファイルアップロードクラス
*
* 修正:
* 複数アップロードする場合ファイル、ファイル情報はフォーム名をキーとした配列になります
+------------------------------------- -------- -----------------------------------
* @category ORG
* @package ORG
* @subpackage Net
* @author hxsml
* @version v1.0
+------------------------------------- -------- -------------------------------------- --------
*/
class UploadFile {//クラス定義の開始
// アップロードされるファイルの最大サイズ
Public $maxSize = - 1;
// 複数のファイルのアップロードをサポートするかどうか
public $supportMulti = true;
// アップロードを許可するファイルの接尾辞
// 接尾辞のチェックを行わずに空白のままにしておきます
public $allowExts = array();
// 許可されるファイルの種類アップロードする
// チェックせずに空白のままにする
public $allowTypes = array();
// アップロードした画像にサムネイル処理を使用する
public $thumb = false;
// ギャラリークラスのパッケージパス
public $imageClassPath = 'ORG. Util.Image';
// サムネイルの最大幅
public $thumbMaxWidth;
// サムネイルの最大高さ
public $thumbMaxHeight;
// サムネイルのプレフィックス
public $thumbPrefix = 'thumb_';
public $thumbSuffix = '';
// サムネイル保存パス
public $thumbPath = '';
// サムネイルファイル名
public $thumbFile='';
// 元画像を削除するかどうか
public $thumbRemoveOrigin = false;
//圧縮された画像ファイルをアップロードします
public $zipImages = false;
// サブディレクトリへのファイルの保存を有効にする
public $autoSub = false;
// ハッシュ日付を使用してサブディレクトリを作成できます
public $subType = 'hash';
public $dateFormat = 'Ymd' ;
public $hashLevel = 1; // ハッシュのディレクトリレベル
// アップロードファイルの保存パス
public $savePath = '';
public $autoCheck = true; // 添付ファイルを自動的にチェックするかどうか
//同じ名前のファイルを上書きするかどうか
public $uploadReplace = false;
// アップロードするファイルの命名規則
// たとえば、時刻、uniqid、com_create_guid などにすることができます。
// パラメーターのない関数名である必要があります。カスタム関数を使用できます
public $saveRule = '';
// ファイルのアップロード ハッシュ ルール関数名
// たとえば、md5_file sha1_file などです。
public $hashType = 'md5_file';
/ / エラーメッセージ
private $error = '';
// アップロードに成功したファイル情報
private $uploadFileInfo ;
/**
+------------------------------------------------ ----------
* 建築機能
+------------------------------------- ------------------------
* @access public
+----------------- -- --------------------------------------
*/
public function __construct($maxSize='',$allowExts='', $allowTypes='',$savePath='',$saveRule='') {
if (!empty($maxSize) && is_numeric($maxSize)) {

$this->allowExts = array_map('strto lower' ,$allowExts);
}else {
$this->allowExts =explode(',',strto lower($allowExts));
}
}
if(!empty($allowTypes)) {
if(is _array($allowTypes)) {
$ this->allowTypes = array_map('strto lower',$allowTypes);
}else {
$this->allowTypes =explode(',',strto lower($allowTypes));
}
}
if(!empty ($saveRule)) {
$this->saveRule = $saveRule;
}else{
$this->saveRule=C('UPLOAD_FILE_RULE');
}
$this->savePath = $savePath;
}
/**
+------------------------------------------------ ----------
* ファイルをアップロードします
+--------------------------------- - ------------------------
* @access public
+---------------- -- --------------------------------------
* @param 混合 $name データ
* @param string $value データテーブル名
+-------------------------------------- -- ------------------
* @return string
+----------------------- -- ----------------------------------
* @throws ThinkExecption
+------ --- --------------------------------------------------- -
*/
private function save($file) {
$filename = $file['savepath'].$file['savename'];
if(!$this- >uploadReplace && is_file($filename)) {
// 不被盖同名文件
$this->error='文件已经存在!'.$filename;
return false;
}
// 如果是图像文件检测文件格式
if( in_array(strto lower($file['extension']),array('gif','jpg','jpeg','bmp','png','swf')) && false === getimagesize($file['tmp_name'])) {
$this->error = '非法画像文件';
return false;
}
if(!move_uploaded_file($file['tmp_name'], $this->auto_charset($filename,'utf-8','gbk'))) {
$this->error = '文件上传保存错误!';
return false;
}
if($this->thumb && in_array(strto lower($file['extension']),array('gif','jpg','jpeg','bmp',' png'))) {
$image = getimagesize($filename);
if(false !== $image) {
//是图像文件生成缩略图
$thumbWidth =爆発(',', $this->thumbMaxWidth);
$thumbHeight=explode(',',$this->thumbMaxHeight);
$thumbPrefix=explode( ',',$this->サムプレフィックス);
$thumbSuffix =explode(',',$this->thumbSuffix);
$thumbFile=explode(',',$this->thumbFile);
$thumbPath = $this-> ;thumbPath?$this->thumbPath:$file['savepath'];
// 画像缩略图
生成 import($this->imageClassPath);
$realFilename = $this->autoSub?basename($ file['savename']):$file['savename'];
for($i=0,$len=count($thumbWidth); $i<$len; $i++) {
$thumbname= $thumbPath.$thumbPrefix[$i].substr($realFilename,0,strrpos($realFilename, '.')).$thumbSuffix[$i].'.'.$file['extension'];
画像::thumb($filename,$thumbname,'',$thumbWidth[$i],$thumbHeight[$i],true);
}
if($this->thumbRemoveOrigin) {
// 生成缩略图之後删除原图
unlink($filename);
}
}
}
if($this->zipImags) {
// TODO 对图片压缩包在線上解压
}
return true;
}
/**
+------------------------------------------------ ----------
* すべてのファイルをアップロードします
+--------------------------------- - ------------------------
* @access public
+---------------- -- --------------------------------------
* @param string $savePath アップロード保存するファイルのパス
+------------------------------------------ ------ ----------
* @return string
+--------------------------- ----- ------------------------
* @throws ThinkExecption
+--------------- ----- --------------------------------------
*/
public function Upload($savePath ='') {
//如果不指定保存文件名,则由系统默认
if(empty($savePath))
$savePath = $this->savePath;
// 查上传目录
if(!is_dir($savePath)) {
// 查上传目录
if(is_dir(base64_decode($s) avePath))) {
$savePath=base64_decode($ savePath);
}else{
// 尝试创建目录
if(!mkdir($savePath)){
$this-& gt;error = '上传目录'.$savePath.'存在しない';
return false;
}
}
}Else {(if (! IS_WRITEable ($ savepath)) {
$ this-> error = 'アップロード ディレクトリ'. $ savepath.ay (); $isUpload アップロードされたファイル情報を取得します
ファイルを $key => として保存します。 $file) {
$key ;
>getSaveName($file); ファイルをアップロードします
if (! $ This- & gt; save ( $ file)) false を返します
if (fuSCion_exists ($ this- & gt; havetype)) {
$ Fun = $ This-& GT; $File [' hash'] = $fun($file['savepath'].$file['savename; '],'utf-8','gbk'));
unset を呼び出すためのファイル情報を保存します ($ file ['tmp_name'], $ file ['error']);
$ FileInfo [$ Key] = $ file; if($isUpload) {
使用アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト, false を返します。
/**
+------------------------------------------------ ----------
* 1 つのアップロード フィールドでファイルをアップロードすると、複数の添付ファイルがサポートされます
+-------------------------- --------------------------------
* @access public
+---------------------- --------------------------------------------------
* @param array $file アップロードファイル情報
* @param string $savePath アップロードファイルの保存パス
+--------------------------- ------ ----------------------------
* @return string
+--------- ------------------------------------------------------
* @throws ThinkExecption
+ -------------------------------------- ----- --------
*/
public function UploadOne($file,$savePath=''){
out through '' ' 「スルー」 スルー スルー スルー ‐ スルー ‐ ‐‐‐‐ ‐‐ と
to = $this->savePath;
$this->error = 'No' を返します。
}} else {
if (! Is_writeable ( $ savepath)) {
$ this-> '書き込み不可';
file ['name'])) {
$ key = array_keys ($ file)
$ count;

=

Count ($ file ['name']);
for ($ i = 0; $ i & lt; $ count; $i++) {
}else{
$fileArray[] = $ file; file['拡張子'] = $this->getExt($file['name']); H if ($ this-& gt; autocheck) {
if (! $ This-& gt; check ($ file) )
false を返します; file)) false を返します; $this->auto_charset( $file['savepath'].$file['savename'],'utf-8','gbk'));
}(Unset ($ File ['tmp_name'], $ file ['error']);
$ info [] = $ file;
}
// アップロードされたファイル情報を返す
Return $ info; This-& gt; error = 'ファイルのアップロードを選択しませんでした';
Return false;
}}
// 自動変換文字は配列変換をサポートします
プライベート関数 Auto_Charset ($ FCONTENTS, $ from = 'gbk', $ to to, = ' utf -8') {
$from = strtoupper($from) == 'UTF8' ? : $from;
$to = strtoupper($to) == 'UTF8' ? $ to; ($fContents as $key => $val) {
using using - $val、$from、$to);
}
else {
return $fContents;
}
}

/**
+------------------------------------------------ ----------
* アップロード ファイルの配列変数を正しい方法に変換します
* *
* 修正:
* name=upload[] を設定する場合、キーはファイルに対応する "upload" になります複数のファイルが含まれています
* * 数値インデックスでインデックス付けされた多次元配列、name=upload1...、キーは
* +-------- に対応する名前です-- ------------------------------------------
*@access private
+------ -------------------------------------- ------- --
* @param array $files アップロードされたファイル変数
+---------------------------- ------ -----------------------
* @return array
+-------------- ------------ -------------------------------------- --
*/
プライベート関数 dealFiles($files) {
$fileArray = array();
foreach ($files as $field => $file){
'])) {
$ key = array_keys ($ ファイル);
$ count

=

Count ($ ファイル ['名前']);
for ($ i = 0; $ i & lt; $ count; $i++) {
{
$ファイル配列[$フィールド |
/**
+------------------------------------------------ ----------
* エラーコード情報の取得
+-------------------------------- ------------------------
* @access public
+----------------- --------------------------------------------------
* @param string $errorNo エラー番号
+-------------------------------------- --------- ----------
* @return void
+------------------------ ---------- ------------------------
* @throws ThinkExecption
+------ ----------- -------------------------------------- -
*/
protected function error($errorNo) {
switch($errorNo) {
case 1:
$this->error = 'アップロードされたファイルが php.ini の Upload_max_filesize オプション制限を超えています値 '; a Break;
$ this-& gt; アップロード ファイルのサイズが HTML フォームの max_file_size オプションで指定された値を超えています '; '; :
$this->error = '一時フォルダーが見つかりません';
Break; $this->error = '不明なアップロードエラーです。';
($rule)) {//名前付けルールが定義されていない場合、ファイル名は変更されません
//$saveName = $filename['name'];


$saveName = 日付('YmdHis') .rand()。 "。$ filename ['endoct'];
} else {



}。ファイルを保存するサブディレクトリ
$ filename ['savename'] = $savename; e}
return $saveName($this ->dateFormat,time());休憩; 0;$i}
if(!is_dir($ file ['savepath']。$ dir)){
mk_dir($ file ['savepath']。$ dir);
/*ターサイズ'])) {
$ this-> エラー = 'アップロード ファイルのサイズが一致していません! ';
false を返します。 ';
Return false
}
// ファイルの種類を確認します
if (! $ This- & gt; checkext ($ file [' extension ']) {
$ this- & gt; error =' アップロードするファイルの種類は許可されません ' ; U Return false
}
// 合法的にアップロードされたかどうかを確認します





($ file ['tmp_name']) {
$ This- & gt; = 'ファイルが違法にアップロードされました!';
return false;
}
return true;
}
/**
+------------------------------------------------ ----------
* アップロードされたファイルの種類が合法かどうかを確認してください
+---------------------------- - ------------------------
* @access private
+-------------- -- ------------------------------------------------
* @param string $ type data
+------------------------------------------ ------ ------------------------
* @return boolean
+------------------------------------- --------- ------------------------
*/
private function checkType($type) {
if(!empty($this->allowTypes))
return in_array( strto lower($type),$this->allowTypes);
return true;
}
/**
+------------------------------------------------ ----------
* アップロードされたファイルの拡張子が合法かどうかを確認してください
+-------------------------- --- ------------------------
* @access private
+-------------- --------------------------------------------------
* @param string $ ext suffix
+---------------------------------------- -------- -------------
* @return boolean
+---------------------- ---------------------------------------
*/
private function checkExt($ext) {
if(!empty($this->allowExts ))
return in_array(strto lower($ext),$this->allowExts,true);
return true;
}
/**
+------------------------------------------------ ----------
* ファイルサイズが合法かどうかを確認してください
+---------------------------- ----- ------------------------
* @access private
+--------------- ---- ------------------------------------------
* @param整数 $size データ
+------------------------------------------ ---- ----------
* @return boolean
+---------------------------- ----- ------------------------
*/
private function checkSize($size) {
return !( $size > $this->maxSize) || (-1 == $this->maxSize);
}
/**
+------------------------------------------------ ----------
* ファイルが不正に提出されていないか確認してください
+---------------------------- ----- ------------------------
* @access private
+--------------- ---- ------------------------------------------
* @param string $filename ファイル名
+------------------------------------------ ------------------ -----------
* @return boolean
+-------------- --------------------------------------
*/
private function checkUpload($filename) {
return is_uploaded_file($filename);
}
/**
+------------------------------------------------ ----------
* アップロードされたファイルの拡張子を取得します
+---------------------------- ----- ------------------------
* @access private
+--------------- ---- ------------------------------------------
* @param string $filename ファイル名
+------------------------------------------ ------------------ -----------
* @return boolean
+-------------- --------------------------------------
*/
private function getExt($filename) {
$pathinfo = pathinfo($filename);
return $pathinfo['extension'];
}
/**
+------------------------------------------------ ----------
* アップロードされたファイル情報を取得します
+-------------------------------- -- ------------------------
* @access public
+-------------- - ----------------------------------------
* @return array
+ -------------------------------------------------- ------
*/
public function getUploadFileInfo() {
return $this->uploadFileInfo;
}
/**
+------------------------------------------------ ----------
* 最後のエラー メッセージを取得します
+---------------------------- --- ------------------------
* @access public
+-------------- -- ------------------------------------------
* @return string
+- ------------------------------------------------ -- -------
*/
public function getErrorMsg() {
return $this->>エラー;
}
}

上記は、thinkphp ファイルのアップロード クラスを内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート