zoukankan      html  css  js  c++  java
  • php实现文件上传

    存档:

    upload1.html(单文件上传)

     1 <html>
     2     <head>
     3         <title>单个文件上传</title>
     4     </head>
     5     <body>
     6         <form action="upload.php" method="post" enctype="multipart/form-data">
     7             <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
     8             选择文件:<input type="file" name="myfile">
     9             <input type="submit" value="上传文件">
    10         </form>
    11     </body>
    12 </html>

    upload2.html(多文件上传)

     1 <html>
     2     <head>
     3         <title>多文件上传</title>
     4     </head>
     5     <body>
     6         <form action="upload.php" method="post" enctype="multipart/form-data">
     7             <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
     8             选择文件1:<input type="file" name="myfile[]"><br>
     9             选择文件2:<input type="file" name="myfile[]"><br>
    10             选择文件3:<input type="file" name="myfile[]"><br>
    11             <input type="submit" value="上传文件">
    12         </form>
    13     </body>
    14 </html>

    upload.php

     1 <?php
     2     require "fileupload.class.php";
     3     $up=new FileUpload;
     4     $up ->set('path','./newpath/')
     5         ->set('size',1000000)
     6         ->set('allowtype',array('gif','jpg','png'))
     7         ->set('israndname',false);
     8     if($up->upload('myfile')){
     9         print_r($up->getFileName());
    10     }
    11     else{
    12         print_r($up->getErrorMsg());
    13     }
    14 ?>

    fileupload.class.php

      1 <?php
      2     class FileUpload{
      3         private $path="./uploads";
      4         private $allowtype=array('jpg','gif','png');
      5         private $maxsize=1000000;
      6         private $israndname=true;
      7         private $originName;
      8         private $tmpFileName;
      9         private $fileType;
     10         private $fileSize;
     11         private $newFileName;
     12         private $errorNum=0;
     13         private $errorMess="";
     14         
     15         function set($key,$val){
     16             $key=strtolower($key);
     17             if(array_key_exists($key,get_class_vars(get_class($this)))){
     18                 $this->setOption($key,$val);
     19             }
     20             return $this;
     21         }
     22         
     23         function upload($fileField){
     24             $return=true;
     25             if(!$this->checkFilePath()){
     26                 $this->errorMess=$this->getError();
     27                 return false;
     28             }
     29             $name=$_FILES[$fileField]['name'];
     30             $tmp_name=$_FILES[$fileField]['tmp_name'];
     31             $size=$_FILES[$fileField]['size'];
     32             $error=$_FILES[$fileField]['error'];
     33             if(is_Array($name)){
     34                 $errors=array();
     35                 for($i=0;$i<count($name);$i++){
     36                     if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
     37                         if(!$this->checkFileSize()||!$this->checkFileType()){
     38                             $errors[]=$this->getError();
     39                             $return=false;
     40                         }
     41                     }
     42                     else{
     43                         $errors[]=$this->getError();
     44                         $return=false;
     45                     }
     46                     if(!$return){
     47                         $this->setFiles();
     48                     }
     49                 }
     50                 if($return){
     51                     $fileNames=array();
     52                     for($i=0;$i<count($name);$i++){
     53                         if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
     54                             $this->setNewFileName();
     55                             if(!$this->copyFile()){
     56                                 $errors[]=$this->getError();
     57                                 $return=false;
     58                             }
     59                             $fileNames[]=$this->newFileName;
     60                         }
     61                     }
     62                     $this->newFileName=$fileNames;
     63                 }
     64                 $this->errorMess=$errors;
     65                 return $return;
     66             }
     67             else{
     68                 if($this->setFiles($name,$tmp_name,$size,$error)){
     69                     if($this->checkFileSize()&&$this->checkFileType()){
     70                         $this->setNewFileName();
     71                         if($this->copyFile()){
     72                             return true;
     73                         }
     74                         else{
     75                             $return=false;
     76                         }
     77                     }
     78                     else{
     79                         $return=false;
     80                     }
     81                 }
     82                 else{
     83                     $return=false;
     84                 }
     85                 if(!$return){
     86                     $this->errorMess=$this->getError();
     87                 }
     88                 return $return;
     89             }
     90         }
     91         
     92         public function getFileName(){
     93             return $this->newFileName;
     94         }
     95         
     96         public function getErrorMsg(){
     97             return $this->errorMess;
     98         }
     99         
    100         private function getError(){
    101             $str="上传文件<font color='red'>{$this->originName}</font>时出错:";
    102             switch($this->errorNum){
    103                 case 4:
    104                     $str.="没有文件被上传";
    105                     break;
    106                 case 3:
    107                     $str.="文件只有部分被上传";
    108                     break;
    109                 case 2:
    110                     $str.="上传的文件大小超过了HTML表单中MAX_FILE_SIZE选项指定的值";
    111                     break;
    112                 case 1:
    113                     $str.="上传的文件超过了php.ini中的upload_max_filesize选定限制的值";
    114                     break;
    115                 case -1:
    116                     $str.="未允许类型";
    117                     break;
    118                 case -2:
    119                     $str.="文件过大,上传的文件不能超过{$this->maxsize}个字节";
    120                     break;
    121                 case -3:
    122                     $str.="上传失败";
    123                     break;
    124                 case -4:
    125                     $str.="建立存放上传文件目录失败,请重新指定上传目录";
    126                     break;
    127                 case -5:
    128                     $str.="必须指定上传文件的路径";
    129                     break;
    130                 default:
    131                     $str.="未知错误";
    132                     //break;
    133             }
    134             return $str.'<br>';
    135         }
    136         
    137         private function setFiles($name="",$tmp_name="",$size=0,$error=0){
    138             $this->setOption('errorNum',$error);
    139             if($error){
    140                 return false;
    141             }
    142             $this->setOption('originName',$name);
    143             $this->setOption('tmpFileName',$tmp_name);
    144             $aryStr=explode(".",$name);
    145             $this->setOption('fileType',strtolower($aryStr[count($aryStr)-1]));
    146             $this->setOption('fileSize',$size);
    147             return true;
    148         }
    149         
    150         private function setOption($key,$val){
    151             $this->$key=$val;
    152         }
    153         
    154         private function setNewFileName(){
    155             if($this->israndname){
    156                 $this->setOption('newFileName',$this->proRandName());
    157             }
    158             else{
    159                 $this->setOption('newFileName',$this->originName);
    160             }
    161         }
    162         
    163         private function checkFileType(){
    164             if(in_array(strtolower($this->fileType),$this->allowtype)){
    165                 return true;
    166             }
    167             else{
    168                 $this->setOption('errorNum',-1);
    169                 return false;
    170             }
    171         }
    172         
    173         private function checkFileSize(){
    174             if($this->fileSize>$this->maxsize){
    175                 $this->setOption('errorNum',-2);
    176                 return false;
    177             }
    178             else{
    179                 return true;
    180             }
    181         }
    182         
    183         private function checkFilePath(){
    184             if(empty($this->path)){
    185                 $this->setOption('errorNum',-5);
    186                 return false;
    187             }
    188             if(!file_exists($this->path)||!is_writable($this->path)){
    189                 if(!@mkdir($this->path,0755)){
    190                     $this->setOption('errorNum',-4);
    191                     return false;
    192                 }
    193             }
    194             return true;
    195         }
    196         
    197         private function proRandName(){
    198             $fileName = date('YmdHis')."_".rand(100,999);
    199             return $fileName.'.'.$this->fileType;
    200         }
    201         
    202         private function copyFile(){
    203             if(!$this->errorNum){
    204                 $path=rtrim($this->path,'/').'/';
    205                 $path.=$this->newFileName;
    206                 if(@move_uploaded_file($this->tmpFileName,$path)){
    207                     return true;
    208                 }
    209                 else{
    210                     $this->setOption('errorNum',-3);
    211                     return false;
    212                 }
    213             }
    214             else{
    215                 return false;
    216             }
    217         }
    218     }
    219 ?>

    结果如下:

     

  • 相关阅读:
    C# 中Async 和 Await 的用法,异步等待执行结果
    C# 事件发布和订阅
    C# 多线程使用信号量控制处理效率,统计活动中的线程
    C# 委托和泛型委托示例
    C# 数据库批量插入数据之 —— SqlBulkCopy、表值参数
    WinRar DOS命令大全带详细参数rar/zip/7z压缩文件解密
    Magic.Orm 基于C#的ORM框架,支持Sql Server/MySql/Oracle/Access/Sqlite等数据库,支持Lambda表达式快速上手0难度
    SqlServer使用SqlBulkCopy批量新增和更新数据,快速高效
    Flink内存模型
    Linux 查找替换
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/8408786.html
Copyright © 2011-2022 走看看