Heim >Backend-Entwicklung >PHP-Tutorial >thinkphp-Klasse zum Hochladen von Dateien
/**
*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.