• 100)PHP,文件上传总代码整理


    首先是我的目录关系:
        

        

    然后我的html表单代码:

          

            

     1 <html>
     2 <head>
     3     <title>Form</title>
     4     <meta
     5             http-equiv="Content-Type" content="text/html;charset=UTF-8">
     6 </head>
     7 
     8 <body>
     9 <form action="BBB.php" method="post" name="form1" enctype="multipart/form-data" >
    10     <table width="271" border="0" align="center" cellpadding="0" cellspacing="0">
    11     <tr>
    12         <td width="85">
    13             <div align="right">姓名:</div></td>
    14         <td width="186">
    15             <label>
    16                 <input name="username" type="text" id="username">
    17             </label>
    18         </td>
    19 
    20     </tr>
    21     <tr>
    22         <td>
    23             <div align
    24             ="right">职业:</div></td>
    25         <td>
    26             <label>
    27                 <input name
    28                 ="job" type="text" id="job">
    29             </label></td>
    30     </tr>
    31         <tr>
    32             <td>
    33                 <label>
    34                     文件上传:<input type="file" name="picture">
    35                 </label>
    36             </td>
    37         </tr>
    38     </table>
    39     <p align="center">
    40     <input type="submit" value="Submit">
    41     </p>
    42 </form>
    43 </body>
    44 </html>

    然后是我的BBB.php代码

                  

     1 <?php
     2     /**
     3      * 上传函数
     4      * @param $tmp_file  $_FILES的五个信息,比如upload($_FILES('mingzi')
     5      * $_FILES里面的名字是你的对应的html代码中的上传文件的那个name
     6      * @return bool  失败返回false,成功就是true
     7      */
     8     $tmp_file=$_FILES['picture'];
     9     function upload($tmp_file){
    10     
    11         /**
    12          * 是否存在错误
    13          */
    14         
    15         if($tmp_file['error']!=0){
    16             echo '文件上传错误';
    17             return false;
    18         }
    19         /**
    20          * 尺寸,
    21          * 这个函数自己定的,但是应该是初始化设定的,就是这个值是变化的,不是一个固定的值。
    22          */        
    23       
    24         $max_size=1024*1024;//自己设定的最大尺寸
    25         if($tmp_file['size']>$max_size){
    26             echo "文件过大";
    27             return false;
    28         }
    29         /**
    30          * 验证后缀名,
    31          * 用验证后缀和MIME方法
    32          */
    33                 //首先是验证后缀名
    34         $tmp_file_zhui=strrchr($tmp_file['name'],'.') ;
    35                 //strrchr函数是来剪切字符串的最后出现.的包括这个.后面的全部截取
    36         //后缀的映射数组,其实就是那个满足条件的后缀表(用关联数组表示)
    37         $tmp_file_zhui_list=array(
    38             '.png','.gif','.jpeg','.jpg'
    39         );
    40         if(!in_array($tmp_file_zhui,$tmp_file_zhui_list)){
    41             echo "文件格式有问题";
    42             return false;
    43         }
    44                 //就是那个$_FILES['type']有一个格式,下面的是对应那个映射表
    45         $tmp_file_zhui_MIMElist=array(
    46             '.png'=>array('image/png','image/x-png'),
    47             '.jpg'=>array('image/jpeg','image/x-pjpeg'),
    48             '.jpeg'=>array('image/jpeg','image/pjpeg'),
    49             '.gif'=>array('image/gif'),
    50         );
    51         $old_list=array();//下面直接用$old_list不行,我觉得这个就是声明,这是自己加的
    52         //得出真正的映射表,因为在我的后缀映射表中,可能不是这四个,一旦发生改动,我的下面的映射关系,我还得自己改,所以,我就用一个foreach,上面有什么后缀,我的下面就给他对应上什么$_FILE['type']格式,然后得到我要的MIME映射表
    53         foreach ($tmp_file_zhui_list as $value){
    54             foreach($tmp_file_zhui_MIMElist[$value] as $key=>$item){
    55 //               var_dump($tmp_file_zhui_MIMElist[$value][$key]);
    56                 $new_MIME_list=array_merge($old_list,(array)$tmp_file_zhui_MIMElist[$value][$key]);
    57                $old_list=$new_MIME_list;
    58             }
    59             
    60         }
    61         //去重
    62         $new_MIME_list=array_unique($new_MIME_list);
    63         
    64         //然后用MIME验证
    65         $phpfinfo=new finfo(FILEINFO_MIME_TYPE);
    66         $f_type=$phpfinfo->file($tmp_file['tmp_name']);
    67         echo $f_type;
    68         if(!in_array($f_type,$new_MIME_list)){
    69             echo "文件格式有误";
    70             return false;
    71         }
    72         //后缀验证完成。
    73         //建立一个文件夹,来存我的临时文件
    74         if(!is_dir('./wangchao')){
    75             mkdir('./wangchao');
    76         }
    77         
    78         $sub_dir_name=date('Y--m-d-H');//截取年月日小时
    79         //unipid是产生一个随机名字,可以试验一下  echo uniqid();
    80         move_uploaded_file($tmp_file['tmp_name'],'./wangchao/'.uniqid('wang_'.$sub_dir_name.'_').$tmp_file_zhui);
    81         return true;
    82     }
    83 upload($tmp_file);
  • 相关阅读:
    5.2.9.字符设备驱动代码实践2
    5.2.8.字符设备驱动代码实践1
    5.2.7.字符设备驱动工作原理2
    5.2.6.字符设备驱动工作原理1
    带参宏定义的思考
    重读gets()与is函数的用法
    地址/指针和字符串
    总体来说,require_once 肯定要比 require 性能好
    auto_prepend_file与auto_append_file使用方法
    经验分享:CSS浮动(float,clear)通俗讲解
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/7422366.html
Copyright © 2020-2023  润新知