Heim >Backend-Entwicklung >PHP-Tutorial >thinkphp-Klasse zum Hochladen von Dateien

thinkphp-Klasse zum Hochladen von Dateien

WBOY
WBOYOriginal
2016-08-08 09:31:411058Durchsuche

/**
*Dies ist eine Datei-Upload-Klasse, die zum Verarbeiten hochgeladener Dateien, Bilder usw. verwendet wird und automatisch Miniaturansichten generieren und Wasserzeichen hinzufügen kann
*/
// +----------------------------- --------------------------------------------------
// |. ThinkPHP [Wir können es einfach tun]
// +--------------------------- ---------------------------------------------
/ / |. Copyright (c) 2009 http://thinkphp. Alle Rechte vorbehalten.
// +----------- ------------- --------------------
// |. Lizenziert ( http://www.apache.org/licenses /LICENSE-2.0 )
// +---------------------- ---------------------- -------------- ------
// |. Autor: hxsml
// +---- ---------- --------------------------------------- -
// $Id: UploadFile .class.php v1.0
/**
+------------------------------- --- --------------------------------
* Datei-Upload-Klasse
*
* Änderung:
* Beim Hochladen mehrerer Dateien verwendet fileinfo den Formularnamen als Schlüsselarray
+------------------------- -------- ----------------------------------------
* @category ORG
* @package ORG
* @subpackage Net
* @author hxsml
* @version v1.0
+---------- - ------------------------------------------------- - -----------------
*/
class UploadFile {/ /Start of class definition
// Maximale Größe hochgeladener Dateien
public $maxSize = -1;
// Ob das Hochladen mehrerer Dateien unterstützt werden soll
public $supportMulti = true;
// Hochladen des Dateisuffixes zulassen
// Leer lassen und Suffix nicht überprüfen
public $allowExts = array( );
// Dateitypen, die hochgeladen werden dürfen
// Leer lassen und nicht aktivieren
public $allowTypes = array();
// Miniaturbildverarbeitung für hochgeladene Bilder verwenden
public $thumb = false;
// Galerie-Klassenpaketpfad
public $imageClassPath = 'ORG.Util.Image' ;
// Maximale Miniaturbildbreite
public $thumbMaxWidth;
// Maximum Miniaturbildhöhe
public $thumbMaxHeight;
// Miniaturbild-Präfix
public $thumbPrefix = 'thumb_ ';
public $thumbSuffix = '';
// Miniaturbild-Speicherpfad
public $ thumbPath = '';
// Miniaturbild-Dateiname
public $thumbFile='';
// Ob das Originalbild entfernt werden soll
public $thumbRemoveOrigin = false;
// Komprimierte Bilddatei hochladen
public $zipImages = false;
// Unterverzeichnisse zum Speichern von Dateien aktivieren
public $autoSub = false;
// Unterverzeichnisse können sein erstellt mit Hash date
public $subType = 'hash';
public $dateFormat = ' Ymd';
public $hashLevel = 1; // Verzeichnisebene des Hash
// Dateispeicherpfad hochladen
public $savePath = '';
public $autoCheck = true; // Ob es automatisch erfolgt. Überprüfen Sie den Anhang
// Ob derselbe Name vorhanden ist und überschreiben Sie
public $uploadReplace = false;
// Regeln für die Benennung von Dateien hochladen
// Beispielsweise kann es sich um die Zeit uniqid com_create_guid usw. handeln.
// Muss ein unnötiger Parameter sein. Der Funktionsname jedes Parameters kann eine benutzerdefinierte Funktion verwenden
public $saveRule = '';
// Datei hochladen Name der Hash-Regelfunktion
// Beispielsweise kann es sich um md5_file, sha1_file usw. handeln.
Public $hashType = 'md5_file';
// Fehlermeldung
private $error = '';
// Dateiinformationen des erfolgreichen Uploads
private $uploadFileInfo ;
/**
+------------------------------- -- ------------
* Architektonische Funktion
+-------------------------- ------------------------------------
* @access public
+--- ------ -------------------------------------------- ------
*/
öffentliche Funktion __construct ($maxSize='',$allowExts='',$allowTypes='',$savePath='',$saveRule='') {
if(!empty( $ maxsize) && is_numeric ($ maxsize) {
$ this- & gt; maxsize = $ maxsize;
}
if (! EMPTY ($ Allowexts)) {
if (is_array $ Allowexts ))                                                                                                                                                        else {
                $this->allowExts = explosion(',',strtolower($allowExts));
            }
        }
        if(!empty($allowTypes)) {
           wenn (is_array($allowTypes)) {
                $this->allowTypes = array_map('strtolower',$allowTypes);
            }else {
                $this->allowTypes = explosion(',', strtolower($allowTypes));
            } 🎜> $this->saveRule

=

C('UPLOAD_FILE_RULE');
        }        $this->savePath = $savePath;    } /** +------------------------------- -- ------------
* Datei hochladen
+------------------------- ------------------------------------
* @access public
+--- ----- --------------------------------------------- -----
* @param gemischte $name-Daten
* @param string $value-Datentabellenname
+------------------- ----- --------------------
* @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( sion']),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(strtolower($file['extension']),array('gif','jpg','jpeg' ,'bmp','png'))) {
            $image =  getimagesize($filename);
            if(false !== $image) {
                //是图像文件生成缩略图
                $thumbWidth=explode(',',$this->thumbMaxWidth);
                $thumbHeight=explode( ',',$this->thumbMaxHeight);
                $thumbPrefix=explode(',',$this->thumbPrefix);
                $thumbSuffix = explosion(',',$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'];
                    Image::thumb($filename,$thumbname,'',$thumbWidth[$i],$thumbHeight[$ i],true);
                }
                if($this->thumbRemoveOrigin) {
                    // 生成缩略图之后删除原图
                    unlink($filename);
                }
            }
        }
        if($this->zipImags) {
            // TODO 对图片压缩包在线解压
        }
        return true;
    }
    /* *
+------------------------------- -- ------------
* Alle Dateien hochladen
+------------------------- ------------------------------------
* @access public
+--- ----- --------------------------------------------- -----
* @param string $savePath Dateispeicherpfad hochladen
+---------------------------- ------ -----------
* @return string
+------- ------- ------------------------------------------- -------
* @throws ThinkExecption
+-------------------------------- ---------------- -------------
*/
   public function upload($savePath ='') {
        //如果不指定保存文件名,则由系统默认
        if(empty($savePath))
$savePath = $this->savePath;
        // 检查上传目录>        if(!is_dir($savePath)) {
            // 检查目录是否编码后的
            if(is_dir(base64_decode ($savePath))) {
                $savePath
=base64_decode($savePath);            }else{
                // 尝试创建目录
                if( !mkdir($savePath)){
                    $this->error  =  '上传目录'.$savePath.'不存在';
                    return false;
               }
            }
        }else {
                                                                                                                                                                      🎜>=

$this->dealFiles ($_FILES ); (!empty($file['name'])) {
                                                                                                      $this->getExt($file['name']);
$file['savepath'] = $savePath;
$file['savename'] = $this->getSaveName($file. );
                                                               return false;
                                                                                                          $fun = $this->hashType;
$file[' hash'] = $fun($this->auto_charset($file['savepath'].$file['savename'],'utf-8', 'gbk')); / Speichern Sie die Dateiinformationen, nachdem der Upload erfolgreich war, damit Sie sie an anderen Orten aufrufen können.
unset ($ file ['tmp_name'], $ file ['error']); $isUpload = true; } } if($isUpload) {
$this->uploadFileInfo = $fileInfo;
                    return true;
/**
+------------------------------- -- ------------
* Das Hochladen von Dateien in ein einzelnes Upload-Feld unterstützt mehrere Anhänge
+------------------ -- -----------------------------------------------
* @access public
+- --------------------------------------- ----------- -------
* @param array $file Dateiinformationen hochladen
* @param string $savePath Speicherpfad der Datei hochladen
+--- ---------- -------------------------- ----------
* @return string
+----------------------------- ------------------- -------------
* @throws ThinkExecption
+------- ------------------- ----------------- -
*/
öffentliche Funktion uploadOne($file,$savePath=''){
//Wenn der Name der Speicherdatei nicht angegeben ist, verwendet das System standardmäßig
if( empty ($savePath))
$savePath = $this->savePath;
if(!mk_dir($savePath)){
                                                                                                  $this->error                 }else {<.>                                                                                                                                                    }
}
                                                                                )) {
$keys = array_keys( $file);
$count

=

count($file['name']);
for ($ i=0; $i<$count; $i++) {
foreach ($keys as $key)

                                                                                                                                                   
foreach ($fileArray as $key=>$ file ; = $savepath; > if(!$this->check($file))
                                                                                            >save($file)) return false;
if(function_exists($this->hashType)) {
$fun = $this->hashType;
$file['hash'] = $ fun($this-> auto_charset($file['savepath'].$file['savename'] ,'utf-8','gbk'));               }
                                                                                                                                      Return $ info; $fContents, $from='gbk', $to='utf-8') {
$from = strtoupper($from) == 'UTF8' ? 'utf- 8 ': $ From;
$ TO = Strtoupper ($ To) ==' UTF8 '?' $fContents) && !is_string($fContents))) {
                                                                                                                                                       |. >}
If (IS_STRING ($ FCONTENTS)) {
If (FUNCTION_EXISTS ('MB__CONVERT_ENCODING') ) {
Rückgabe MB_CONVERT_ENCODING ( $ Fontents, $ TO, $ FROM);
} elseif (Function_exists ('iconv')) {
                  return iconv($from, $to, $fContents ));
foreach ($fContents as $key => $val) {
$_key = $this->auto_charset($key, $from, $to);
$fContents[$ _key] = $this->auto_charset($val, $from, $to);
if ($key != $_key)
unset($fContents[$key]);
} }
/**
+------------------------------- -- ------------
* Konvertieren Sie die Upload-Datei-Array-Variable in die richtige Richtung
* *
* Änderung:
* Beim Festlegen von name=upload[] , der Schlüssel ist „upload“ entspricht einem mehrdimensionalen Array, das durch einen numerischen Index indiziert ist und mehrere Dateiinformationen enthält, name=upload1..., der Schlüssel ist der Name
entsprechend
* +---- - ------------------------------------------------- - ---
* @access private
+----------------------------------- ------------- ---------
* @param array $files Hochgeladene Dateivariablen
+----------- ------------------------------------- -------------
* @return array
+-------------------------- ------------------- ----------------
*/
private Funktion dealFiles ($files) {
$fileArray = array();
foreach ($files as $field => $file){
if (is_array($file['name'])) {
                $keys = array_keys($file); $ i & lt; Foreach ($ Keys as $ Key)
$ Filearray [$ Field] [$ Key] = $ FILE [$ Key] [$ i];
}
      }else{
            $fileArray[$field] = $file;
              }
                                                                     
/**
+------------------------------- -- ------------
* Informationen zum Fehlercode abrufen
+------------------------ -- --------------------------------
* @access public
+----- -------------------------------------------------- -- -
* @param string $errorNo Fehlernummer
+-------------------------------- -- ------------
* @return void
+----------- ---- ------------------------------------------
* @throws ThinkExecption
+---------------------------------------------------------- ----- ------------
*/
protected function error($errorNo) {
switch($errorNo) {
case 1:
$this->error = 'Uploaded The Datei überschreitet das Limit der Option upload_max_filesize in php.ini'; ';
                                                                                                                                 Fall 4:
$this-> error = 'Keine Datei hochgeladen';
break;
Fall 6:
$this->error = 'Temporärer Ordner nicht gefunden';
Fall 7:
               $this->error = 'Schreiben der Datei fehlgeschlagen';';
}
return ;
}
/**
+------------------------------- -- ------------
* Rufen Sie den gespeicherten Dateinamen gemäß den Benennungsregeln für hochgeladene Dateien ab
+---------------- ----- ----------------------------------------
* @ Zugriff privat
+-- ---------------------------- -------- ------
* @param string $filename data
+---------------------- ----------- --------------
* @return string
+ ---------- -------------------------- ----------
*/
private function getSaveName($filename) {
$rule = $this->saveRule;

if(empty($rule)) {//Wenn keine Benennungsregel definiert ist, behalten Sie den Dateinamen unverändert
//$saveName = $filename['name'] ;
$saveName = date('YmdHis').rand().".".$filename['extension'];
        }else{

                                                                                                                                                                                          >.                                                                                                                                                       Verwenden eines Unterverzeichnisses zum Speichern der Datei .'/'.$saveName;
}
                                                using        verwendend verwendend       durchgehend durch aus durch aus durch aus durch aus durch durch aus       durch '     durch       durch durch '''''' durch‐‐bis ‐‐‐w‐ bis zu geben an . {
                                                                                                                                           ash':
                                                                                                                                                                                                                                 this->hashLevel; $i++) {
                                             if(!is_dir($file['savepath'] .$dir)) {
                                                                                
/**
+------------------------------- -- ------------
* Hochgeladene Dateien prüfen
+------------------------- - --------------------------------
* @access private
+------ - ------------------------------------------------- - -
* @param array $file Dateiinformationen
+--------------------------------- - ------------
* @return boolean
+------------ --- ----------------
*/
private function check($file) {
if($file['error']!== 0) {
//Datei-Upload fehlgeschlagen
                                                                                      $this->error($file['error']);                                                   return false;                                                                                                                                                                                  if(!$this->checkSize($file['size'])) { ';
               return false; >error = 'Der MIME-Typ der hochgeladenen Datei ist nicht zulässig! ';
                return false; ;error ='Der hochgeladene Dateityp ist nicht zulässig';
                                                                                             return false )) {
$this->error = 'Illegal file upload!';
            return false;
        }
        return true;
    }
    /**
+------------------------------- -- ------------
* Überprüfen Sie, ob der hochgeladene Dateityp legal ist
+-------------------- --- ----------------------------------
* @access private
+-- -------------------------------------------------- -- ----
* @param string $type data
+------------------------------ -- ------------
* @return boolean
+----------- -- ---------------------------------------------
*/
    private function checkType($type) {
        if(! empty($this->allowTypes))
            return in_array(strtolower($type),$this->allowTypes);
        return true;
    }
    /**
+------------------------------- -- ------------
* Überprüfen Sie, ob das hochgeladene Dateisuffix legal ist
+------------------ ----- --------------------
* @access private
+ ---- ---------------------------------------------- ---- ----
* @param string $ext suffix name
+--------------------------- ------- -----------
* @return boolean
+------ ------ -------------------------------------------- ------
* /
    private function checkExt($ext) {
        if(!empty($this->allowExts))
            return in_array(strtolower($ext),$this->allowExts,true);
        return true;
    }
    /**
+------------------------------- -- ------------
* Überprüfen Sie, ob die Dateigröße zulässig ist
+--------------------- ---- ----------------------------------
* @access private
+- ----- --------------------------------------------- ----- --
* @param integer $size data
+----------------------------- ----- -----------
* @return boolean
+-------- ------- ------------------------------------------- --
*/
    private function checkSize($size) {
        return !($size > $this->maxSize) | | (-1 == $this->maxSize);
    }
    /**
+------------------------------- -- ------------
* Überprüfen Sie, ob die Datei illegal übermittelt wurde
+--------------------- ---- ----------------------------------
* @access private
+- ----- --------------------------------------------- ----- --
* @param string $filename Dateiname
+---------------------------- ------ -----------
* @return boolean
+------- ------- ------------------------------------------- -------
*/
    private function checkUpload($filename) {
        return is_uploaded_file($filename);
    }
    /**
+------------------------------- -- ------------
* Holen Sie sich das Suffix der hochgeladenen Datei
+--------------------- ---- ----------------------------------
* @access private
+- ----- --------------------------------------------- ----- --
* @param string $filename Dateiname
+---------------------------- ------ -----------
* @return boolean
+------- ------- ------------------------------------------- -------
*/
    private function getExt($filename) {
        $pathinfo = pathinfo($filename);
        return $pathinfo['extension'];
    }
/**
+------------------------------- -- ------------
* Hochgeladene Dateiinformationen abrufen
+------------------------ - --------------------
* @access public
+---- -------------------------------------------------- -- --
* @return array
+----------------------------------- ----- ---------------------
*/
public function getUploadFileInfo() {
return $this->uploadFileInfo;
}
/**
+------------------------------- -- ------------
* Letzte Fehlermeldung erhalten
+----------------------- ------------------------------------
* @access public
+--- --- ------------------ --- --
* @return string
+---------------------------------- ------ -------
*/
public function getErrorMsg() {
                                      return $this->error;
Das Obige stellt die Klasse zum Hochladen von Thinkphp-Dateien vor, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn