ホームページ  >  記事  >  バックエンド開発  >  PHPファイルアップロードクラスの例

PHPファイルアップロードクラスの例

墨辰丷
墨辰丷オリジナル
2018-06-06 16:49:532271ブラウズ

この記事では主に PHP ファイルアップロードのクラスの例を紹介します。興味のある方はぜひ参考にしてください。

以下はあなたと共有したコードです:

<?php
define(&#39;NO_FILE&#39;, &#39;不存在上传文件&#39;);
define(&#39;NOT_ALLOW_EXT&#39;, &#39;文件类型不在允许范围内&#39;);
define(&#39;NOT_ALLOW_SIZE&#39;, &#39;文件大小不在允许范围内&#39;);
define(&#39;HAS_THE_FILE&#39;, &#39;该文件已经存在&#39;);
define(&#39;UPLOAD_FAILED&#39;, &#39;上传失败&#39;);
define(&#39;UPLOAD_SUCCESS&#39;, &#39;上传成功&#39;);
class file_uploader
{
  var $_file;
  var $_filesize;
  var $_fileext;
  var $_filedir;
  var $_filename;
  var $_filetmpname;
  
  var $allowsize;
  var $allowext;
  
  var $neednewname;
  var $newname;
  var $syslang;
  
  var $report;
  
  function ready($filedir = &#39;&#39;, $file, $allowsize = &#39;&#39;, $allowext = &#39;&#39;, $neednewname = false, $report = 0){
    $this->_filedir = is_dir($filedir) ? $filedir : &#39;&#39;;
    if(empty($file) || !isset($file[&#39;size&#39;]) || $file[&#39;size&#39;] == 0) $this->error(NO_FILE);
    $this->_filesize = $file[&#39;size&#39;];
    $this->_filename = $file[&#39;name&#39;];
    $this->_filetmpname = $file[&#39;tmp_name&#39;];
    
    $this->allowsize = $allowsize;
    $this->allowext = $allowext;
    
    $this->neednewname = ($neednewname) ? true : false;
    $this->newname = &#39;&#39;;
    
    $this->report = $report;
  }
  
  function do_upload(){
    if(!is_uploaded_file($this->_filetmpname)) $this->error(NO_FILE);
    if($this->chk_ext()){
      $this->error(NOT_ALLOW_EXT);
      return &#39;&#39;;
    }
    if($this->chk_size()){
      $this->error(NOT_ALLOW_SIZE);
      return &#39;&#39;;
    }
    if($this->neednewname) $this->newname = $this->generate_name().".".$this->get_fileext();
    if($this->chk_hasfile()){
      $this->error(HAS_THE_FILE);
      return &#39;&#39;;
    }
    $filename = empty($this->newname) ? @iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$this->_filename) : $this->newname;
    @chmod($this->_filedir.$filename, 0777);
    if(move_uploaded_file($this->_filetmpname, $this->_filedir.$filename)){
      return $this->result();
    }else{
      $this->error(UPLOAD_FAILED);
      return &#39;&#39;;
    }
  }
  
  function chk_ext(){
    if(empty($this->allowext) || in_array($this->get_fileext(), explode("|",$this->allowext))) return false;
    return true;
  }
  
  function chk_size(){
    if(empty($this->allowsize) || get_filesize <= $this->allowsize*1024*1024) return false;
    return true;
  }
  
  function get_filesize(){
    return $this->_filesize;
  }
  
  function get_fileext(){
    return substr($this->_filename,strrpos($this->_filename,".")+1);
  }
  
  function generate_name(){
    return substr(md5(time()),26);
  }
  
  function chk_hasfile(){
    return is_file($this->_filedir.$this->_filename);
  }
  
  function error($tip){
    echo $tip;
  }
  
  function result(){
    if($this->report){
      $filename = empty($this->newname) ? $this->_filename : $this->newname;
      $arr = array(&#39;filename&#39; => $filename, &#39;filesize&#39; => $this->_filesize, &#39;tip&#39; => UPLOAD_SUCCESS);
      return $arr;
    }else{
      return UPLOAD_SUCCESS;
    }
  }
}
/***使用方法与参数说明***/
/***
  第一个参数$dir 为上传文件存放的路径
   第二个参数为$_FILES 为你那个上传文件变量
   第三个参数允许文件大小 单位为MB
  第四个参数允许的文件类型 格式为jpg|png|gif
  第五个参数是否需要生成新的文件名
   第六个参数为返回的提示格式 0为直接提示上传正确 1则返回一个数组array(&#39;filename&#39; => $filename, &#39;filesize&#39; => $this->_filesize, &#39;tip&#39; => UPLOAD_SUCCESS);
***/
//require("类文件");
//$u = new file_uploader;
//$u->ready($dir, $_FILES[&#39;upload_file&#39;], false, false, true, 0);
//echo $u->do_upload();
?>

メソッドを呼び出す
コードは次のとおりです

$dir = &#39;upload/&#39;;
  require("upload_class.php");
  $u = new file_uploader;
  $u->ready($dir, $_FILES[&#39;upload_file&#39;], false, false, true, 0);
  echo $u->do_upload();

概要: 上記がこの記事の全内容です。皆さんの学習に役立つことを願っています。

関連する推奨事項:

php は、curl を使用してプロキシ経由でデータを取得するメソッドを実装します

PHP がユーザー アクセス IP アドレスを取得するためのいくつかのメソッドの詳細な説明

一般的に使用される配列操作メソッドの詳細な説明PHP で

以上がPHPファイルアップロードクラスの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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