ホームページ >バックエンド開発 >PHPチュートリアル >さらに半日かけて PHP アップロード ソリューションを作成しました。
さらに半日かけて php アップロード クラスを書きました
少し前に PHP を学習したばかりですが、もっと練習して PHP に慣れるために、1 日のほとんどを php アップロード クラスの作成に費やしました。このクラスに変更と最適化を加えてください。
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> //up_class.php <?php クラスアップファイル{ private $inputFile //ファイルのドメイン名; private $tmpName //一時ファイル名; private $tmpPath; //一時ファイルのパス private $savePath; // パスを保存します。 private $reType //戻り値の型; private $upMaxSize //アップロードファイルのサイズ制限; private $allowFile //アップロードされたファイルを許可します。 private $upFolder //アップロード先のフォルダー private $isReName //アップロードされたファイルの名前を変更するかどうか private $endFileName //最終的に保存されたファイル名; public $fileSize //ファイルサイズ; public $fileType //ファイルタイプ; public $errorInt; //アップロード失敗とエラーの理由 /*** @param * $inputFile(フォーム内のファイルフィールド名);</br> * $upFolder (サーバーフォルダーに保存);</br> * $isRename(アップロードされたファイルの名前を変更します、値は y|n);</br> * $reType (アップロードが成功した後に返される値: n は返されるファイル名、pn: パスとファイル名を返し、j: [展開される] js を返します);</br> * $upExt (アップロードするファイルのカテゴリ。アップロードされるファイルの種類はフォームごとに制限する必要があるため、たとえば、フォーム A は写真のみ、フォーム B は圧縮パッケージのみをアップロードできます);</br> * $maxSize (アップロードされるファイル サイズを制限します)</br> * @著者:256kb * @2012-5-1*/ パブリック関数 __construct($inputFile , $upExt = 0 , $reType = 'pn' , $upFolder = 'upload/' , $isRename = 'y' , $maxSize = 10485760){ $this->inputFile = $inputFile; $this->reType = $reType; $this->upMaxSize = $maxSize; $this->allowFile = $upExt; $this->upFolder = $upFolder; $this->isReName = $isRename; //$this->errorInt = -1; } パブリック関数 upFile(){ $_file_arr = $_FILES[$this->inputFile]; $this->errorInt = $_file_arr['error']; if(is_uploaded_file($_file_arr['tmp_name'])){ if($_file_arr['tmp_name']){ $this->tmpName = $_file_arr['name']; $this->upMaxSize = $_file_arr['サイズ']; $this->fileType = $_file_arr['type']; $this->tmpPath = $_file_arr['tmp_name']; $this->fileSize = $_file_arr['size']; if($this->upMaxSize > $this->upMaxSize){ $this->errorInt = 6; // サイズがウェブサイトの制限を超えています } if(!$this->isAllow()){ $this->errorInt = 8; //システムはこのタイプのファイルを許可しません } if($this->isReName=='y'){ $this->savePath = $this->upFolder.$this->getFolder().'/'.$this->getNewName() ; $this->endFileName = $this->getNewName(); }それ以外{ $this->savePath = $this->upFolder.$this->getFolder().'/'.$this->tmpName ; $this->endFileName = $this->tmpName; } //エコー $this->errorInt; if(!$this->errorInt>= 1){ move_uploaded_file($this->tmpPath,$this->savePath); } } } } パブリック関数 getFileUrl(){ switch($this->reType){ ケース「n」: $this->endFileName を返す; 壊す; ケース「pn」: $this->savePath を返す; 壊す; ケース「js」: return "<script language="javascript" type="text/javascript">window.parent.LoadAttach('".$this->savePath."');</script>"; 壊す; デフォルト: $this->savePath を返す; } } // 新しいファイル名を取得する パブリック関数 getNewName(){ return substr($this->tmpName,1,strrpos($this->tmpName,".")-1).'_'.mktime().'.'.$this->getFileExt(); }パブリック関数 upStatus(){ //エコー $this->errorInt; switch ($this->errorInt){ ケース1: return 'php.ini のファイル サイズ制限を超えました'; 壊す; ケース 2: return 'MAX_FILE_SIZE オプションで指定されたファイル サイズを超えています'; 壊す; ケース 3: return 'ファイルの一部のみがアップロードされました'; 壊す; ケース4: 「ファイルはアップロードされませんでした」を返します。 壊す; ケース5: return 'アップロードされたファイルのサイズは 0'; 壊す; ケース6: 「サイズがウェブサイトの制限を超えています」を返します。 壊す; ケース7: return 'このアップロード タイプは Web サイトで指定されていません'; 壊す; ケース8: return 'システムはこのタイプのファイルを許可していません'; ケース9: return 'ディレクトリの作成に失敗しました! '; 壊す; } } プライベート関数 isAllow(){ $allow = 配列( 0 => array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png', 'application/x-zip-compressed','application/octet-stream')、 1 => array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png') 、 2 => array('application/x-zip-compressed','application/octet-stream'), 3 => 配列('','','')、 4 => 配列('','','') ); if($this->allowFile>count($allow)-1){ $this->errorInt = 7; //このアップロード タイプは Web サイトで指定されていません }それ以外{ if(in_array($this->fileType, $allow[$this->allowFile])){ true を返します。 }それ以外{ false を返します。 } } } public function getFileExt(){ //ファイル拡張子を取得します return strto lower(substr($this->tmpName,strrpos($this->tmpName,".")+1)); } private function getFolder(){ //対応するフォルダーを取得して自動作成 if(strpos('|rar|zip|7z|iso|','|'.$this->getFileExt().'|')>=0){ $_folder = 'rar'; }elseif(strpos('|gif|jpeg|jpg|png|bmp|pjpeg|psd|','|'.$this->getFileExt().'|')>=0){ $_folder = 'img'; }elseif(strpos('|rm|rmvb|avi|mp4|swf|flv|wmv|','|'.$this->getFileExt().'|')>=0){ $_folder = 'ビデオ'; }elseif(strpos('|doc|txt|xls|mdb||','|'.$this->getFileExt().'|')>=0){ $_folder = 'ドキュメント'; }それ以外{ $_folder = 'その他'; } if(!file_exists($this->upFolder.$_folder)){ if(!mkdir($this->upFolder.$_folder)){ $this->errorInt = 9; //ディレクトリの作成に失敗しました } } $_folder を返します; } } <div class="clear"></div>