- class FileUpload {
- private $filepath; //アップロードしたファイルを保存するパスを指定します
- private $allowtype=array('gif', 'jpg', 'png', 'jpeg'); files Type
- private $maxsize=1000000; //アップロードされるファイルの最大長は 1M です
- private $israndname=true; //ランダムに名前を変更するかどうか、false は元のファイル名を使用します
- private $originName;ソースファイル名
- private $tmpFileName; // 一時ファイル名
- private $fileSize; // ファイルサイズ
- private $errorNum=0;エラー番号
- private $errorMess=""; //エラーレポートを提供するために使用されます
-
- //アップロードされたファイルを初期化するために使用されます
- //1. アップロードパスを指定します、2. 許可されるタイプ、3. 制限サイズ、4. するかどうかランダムなファイル名を使用します
- //ユーザーが位置によってパラメータを渡し、最初のいくつかのパラメータの値を提供せずに後続のパラメータの値を提供できるようにします
- function __construct($options=array()){
- foreach($ options as $key=> ;$val){
- $key=strto lower($key);
- //ユーザーパラメータの配列の添字がメンバー属性名と同じかどうかをチェック
- if(!in_array($ key,get_class_vars(get_class($this))) ){
- continue;
- }
- $this->setOption($key, $val);
- }
- }
- プライベート関数 getError(){
- $str="アップロードfile {$this->originName} の場合のエラー: ";
- switch($this->errorNum){
- case 4: $str .= "ファイルがありませんアップロードされました"; Break;
- case 3: $str .= "ファイルは部分的にのみアップロードされました"; Break;
- case 2: $str .= "アップロードされたファイルは、HTML フォームの MAX_FILE_SIZE オプションで指定された値を超えています" ; Break;
- case 1: $str .= "アップロードされたファイルは、HTML フォームの MAX_FILE_SIZE オプションで指定された値を超えました"; Break;
- case 1: $str .= "アップロードされたファイルは、upload_max_filesize オプションの値を超えましたin php.ini"; Break;
- case -1: $str .= "許可されていないタイプ"; Break;
- case -2: $str .= "ファイルが大きすぎるためアップロードできません。{$this-> を超えています。 maxSize} バイト"; Break;
- case -3: $str .= "アップロードに失敗しました"; Break;
- case -4: $str .= "アップロードされたファイルを保存するディレクトリの作成に失敗しました。アップロード ディレクトリを再指定してください。" ; Break;
- case -5: $str .= "アップロードされたファイルへのパスを指定する必要があります"; Break;
- default: $str .= "不明なエラー";
- }
- return $str.'< ;br> ';
- }
- //ファイルのアップロード パスを確認するために使用されます
- プライベート関数 checkFilePath(){
- if(empty($this->filepath)) {
- $this->setOption('errorNum', - 5) ;
- return false;
- }
- if(!file_exists($this->ファイルパス) || !is_writable($this->ファイルパス)){
- if(!@mkdir($this->ファイルパス, 0755) ){
- $this->setOption('errorNum', -4);
- return false;
- }
- }
- return true;
- }
- //アップロードするファイルのサイズを確認するために使用されます
- プライベート関数 checkFileSize() {
- if($this->fileSize > $this->maxsize){
- $this->setOPtion('errorNum', '-2');
- return false;
- }else{
- return true; }
- }
- //ファイルのアップロードタイプをチェックするために使用されます
- プライベート関数 checkFileType() {
- if(in_array(strto lower($this->fileType), $this->allowtype)) {
- return true;
- } else{
- $this->setOption('errorNum', -1);
- return false;
- }
- }
- //アップロードしたファイル名を設定
- プライベート関数 setNewFileName(){
- if($this-> israndname ){
- $this->setOption('newFileName', $this->proRandName());
- } else {
- $this->setOption('newFileName', $this->originName);
- }
- }
-
- //ランダムなファイル名を設定します
- プライベート関数 proRandName(){
- $fileName=date("YmdHis").rand(100,999);
- return $fileName.'.'.$this->fileType;
- }
- プライベート関数 setOption($key, $val){
- $this->$key=$val;
- }
- //ファイルのアップロードに使用されます
- function UploadFile($fileField){
- $return=true;
- //ファイルのアップロード パスを確認します
- if(!$this->checkFilePath()){
- $this->errorMess=$this->getError();
- return false;
- }
- $name=$ _FILES [$fileField]['name'];
- $tmp_name=$_FILES[$fileField]['tmp_name'];
- $size=$_FILES[$fileField]['size'];
- $error=$_FILES[ $ fileField]['error'];
- if(is_Array($name)){
- $errors=array();
- for($i=0; $iif ( $this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){
- if(!$this->checkFileSize() | | !$this->checkFileType()){
- $errors[]=$this->getError();
- $return=false;
- }
- }else{
- $error[]=$this-> ; getError();
- $return=false;
- }
- if(!$return)
- $this->setFiles();
- }
- if($return){
- $fileNames=array();
- for( $ i=0; $iif($this->setFiles($name[$i], $tmp_name[$i], $ error [$i])){
- $this->setNewFileName();
- if(!$this->copyFile()){
- $errors=$this->getError();
- $return=false ;
- }else{
- $fileNames[]=$this->newFileName;
- }
- }
- }
- $this->newFileName=$fileNames;
- }
- $this->errorMess=$errors;
- return $return;
- } else {
- if($this->setFiles($name, $tmp_name, $size, $error)){
- if($this- >checkFileSize() && $this->checkFileType()){
- $this->setNewFileName();
- if($this->copyFile()){
- return true;
- }else{
- $return =false;
- }
- }else{
- $return=false;
- }
- }else{
- $return=false;
- }
- if(!$return)
- $this->errorMess=$this->getError ();
- return $return;
- }
- }
- プライベート関数 copyFile(){
- if(!$this->errorNum){
- $filepath=rtrim($this->filepath, '/').' /';
- $filepath.=$this->newFileName;
- if(@move_uploaded_file($this->tmpFileName, $filepath)) {
- return true;
- }else{
- $this->setOption(' errorNum', -3);
- return false;
- }
- }else{
- return false;
- }
- }
- //設定と$_FILESに含まれる内容
- private function setFiles($name="", $tmp_name=' ', $size=0, $error=0){
- $this->setOption('errorNum', $error);
- if($error){
- return false;
- }
- $this->setOption( 'originName', $name);
- $this->setOption('tmpFileName', $tmp_name);
- $arrStr=explode('.', $name);
- $this->setOption('fileType', strto lower($arrStr[count($arrStr)-1]));
- $this->setOption('fileSize', $size);
- return true;
- }
- //获取上传後文件用文件名
- function getNewFileName(){
- return $this->newFileName;
- }
- //上传如果失败,调用这个方法,就可看看错误报告
- function getErrorMsg() {
- return $this->errorMess;
- }
- }
复制代
|