ホームページ php教程 php手册 PHP中的一个很好用的文件上传类

PHP中的一个很好用的文件上传类

Jun 13, 2016 am 10:58 AM
class fileupload php private アップロード 書類 使用 親切

 
 class FileUpload{
 
  private $filepath; //设置上传文件的路径
  private $allowtype=array('jpg','jpeg','gif','bmp'); //默认的文件的类型
  private $maxsize=2000000;   //默认文件的大小
  private $israndname=true; //是否使用随机文件名
  private $originName;  //源文件名称
  private $tmpFileName;  //临时文件名
  private $fileType;    //文件类型
  private $fileSize;   //文件的大小
  private $newFileName;  //新文件的名称
  private $errorNum;  //错误号
  private $errorMess=""; //用来提示错误报告
  //用于文件初始化的函数
  function __construct($options=array()){
   foreach($options as $key=>$val){
    $key=strtolower($key);//设置属性名称均为小写
    //get_class_vars(get_class($this))
    //获取当前类的所有的属性
    if(!in_array($key,get_class_vars(get_class($this)))){
     continue;
    }
    else
    {
     $this->setOption($key,$val);
    }
   }
  }

  //定义不同的错误级别
  private function getError(){
   $str="上传文件{$this->originName}时出错:";


   switch($this->errorNum){
    case 4:
     $str.="文件没有被上传";
     break;
    case 3:
     $str.="文件只有部分上传";
     break;
    case 2:
     $str.="上传文件超过了HTML表单中规定的MAX_FILE_SIZE选项的值";
     break;
    case 1:
     $str.="上传文件吵过了php.ini中upload_max_filesize选项的值";
     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."
";
  }

  //为成员属性赋值的函数
  private function setOption($key,$val){
   $this->$key=$val;
  }
  //用于检查上传文件的路径
  private function checkFilePath(){
   //如果文件路径为空
   if(empty($this->filepath)){
    $this->setOption('errorNum',-5);
    return false;
   }
   //判断路径是否存在并且是否可写
   if(!file_exists($this->filepath)||!is_writable($this->filepath)){
    //@是错误抑制符  @ 是忽略错误提示,使其错
    //误消息不会显示在程序里
    if(!@mkdir($this->filepath,0755)){
     $this->setOption('errorNum',-4);
     return false;
    }
   }
   return true;
  }

  //检查文件大小的函数
  private function checkFileSize(){
   if($this->fileSize>$this->maxsize){
    $this->setOption("errorNum",-2);
    return false;
   }
   else
   {
    return true;
   }
 
  }

  //检查上传文件的类型
  private function checkFileType(){
   if(in_array(strtolower($this->fileType),$this->allowtype))
   {
    return true;
   }
   else
   {
    $this->setOption("errorNum",-1);
    return false;
   }
  }
  //上传一个文件
  function uploadFile($fileField){
   $return=true;
   $name=$_FILES[$fileField]["name"]; //post提交的名称
   $tmp_name=$_FILES[$fileField]["tmp_name"];  //上传时的临时文件名
   $size=$_FILES[$fileField]["size"];
   $error=$_FILES[$fileField]["error"];
   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(!$this->checkFilePath()){
    $this->errorMess=$this->getError();
    return false;
   }

   if(!$return)
   {
    $this->errorMess=$this->getError();
   }
   return $return;
  }
  //设置和$_FILES有关的内容
  private function setFiles($name="",$tmp_name="",$size=0,$error=0){
   $this->setOption("errorNum",$error);
   if($this->errorNum){
    return false;
   }
   $arrstr=explode(".",$name);
   $this->setOption("fileType",strtolower($arrstr[count($arrstr)-1]));
   $this->setOption("originName",$name);
   $this->setOption("tmpFileName",$tmp_name);
   $this->setOption("fileSize",$size);
   return true;
  }

  //用于获取上传文件后文件的名称
  function getNewFileName(){
   return $this->newFileName.'上传成功!';
  }


  //上传文件失败时,显示错误信息的函数
  function getErrorMsg(){
   return $this->errorMess;
  }
  private function proRandName(){
   $filename=date("YmdHis").rand(100,999);
   return $filename.".".$this->fileType;
  }

  //设置上传后的文件名称
  private function setNewFileName(){
   if($this->israndname){
    $this->setOption('newFileName',$this->proRandName());
   }
   else
   {
    $this->setOption('newFileName',$this->originName);
   }
  }

  //拷贝文件
  private function 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;
    }
   }
  }
 
 
 }

?>


 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

See all articles