Maison  >  Article  >  développement back-end  >  Exemple de classe de téléchargement de fichier PHP

Exemple de classe de téléchargement de fichier PHP

墨辰丷
墨辰丷original
2018-06-06 16:49:532226parcourir

Cet article présente principalement des exemples de classes de téléchargement de fichiers PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Voici le code à partager avec vous :

<?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();
?>

Méthode d'appel
Le code est le suivant

$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();

Résumé : Ce qui précède est le suivant. Nous espérons que l'ensemble du contenu de cet article sera utile à l'étude de chacun.

Recommandations associées :

PHP utilise curl pour obtenir des données via un proxy

Plusieurs méthodes permettant à PHP d'obtenir les adresses IP d'accès des utilisateurs Détaillées explication

Explication détaillée des méthodes d'opération de tableau couramment utilisées en PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn