zoukankan      html  css  js  c++  java
  • 文件系统处理(二)

    文件的上传下载
      在B/S程序中文件上传已经成为一个常用功能。其目的是客户可以通过浏览器(Browser)将文件上传到服务器(Server)上的指定目录。

    客户端浏览器通过上传form表单向服务器上传文件
    代码:

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

    注意:
    POST提交方法:表单提交只有GET和POST两种,而GET传递数据量小,只能(必须)选择POST
    enctype="multipart/form-data"通过这个属性浏览器告诉服务器将要上传文件,这样务器可以知道上载的文件带有常规的表单信息。
    隐藏表单MAX_FILE_SIZE此字段必须在文件输入字段之前,控制最大的传递文件的大小(字节)。客户端配置,可被跳过,防君子不防小人)

    多文件上传:<input type="file" name="myfile[]"/>可以添加属性multiple使得可以选择多个文件

    服务器端通过PHP管理文件上传
    需要以下三个方面的信息:
      1.设置PHP配置文件中的指令:用于精细的调节PHP的文件上传功能。
            php.ini的配置信息
        file_uploads = On /Off 是否允许文件上传
        upload_max_filesize=2M 上传的文件的最大大小
        post_max_size = 8M POST数据所允许的最大大小
        upload_tmp_dir 上传文件放置的临时目录

    注意配置:upload_max_filesize的大小一定要小于post_max_size的配置大小。


      2.$_FILES多维数组:用于存储各种与上传文件有关的信息,其他数据还使用$_POST去接收
        $_FILES["myfile"]["name"] 客户端机器文件的原始名称,包含扩展名
        $_FILES["myfile"]["size"] 已上传文件的大小,单位字节
        $_FILES["myfile"]["tmp_name"] 文件被上传后再服务器端存储的临时文件名(这是存储在临时目录【由PHP指令upload_tmp_dir指定】中时所指定非文件名)
        注意:脚本结束后自动删除
        $_FILES["myfile"]["error"] 伴随文件上传时产生的错误信息
            error:上传的错误号:0--4
                  0:表示没有发生任何错误。
                  1:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
                  2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
                  3:表示文件只被部分上传。
                  4:表示没有上传任何文件。
                  6:找不到临时文件夹
                  7:文件写入失败
                  $_FILES["myfile"]["type"] 获取从客户端上传文件的MIME类型


      3.PHP文件上传处理函数:用于上传文件的后续处理。
        函数is_uploaded_file()判断指定的文件是否通过HTTP POST上传,如果是返回true
        bool is_uploaded_file(string filename)
        唯一的参数必须指定类似与$_FILES["myfile"]["tmp_name"]的变量,而不能是客户端上传的文件名$_FILES["myfile"]["name"]

        函数move_uploaded_file()文件上传后会先存入临时目录中,需要使用此函数将上传文件移动到指定位置
        bool move_uploaded_file(string filename,string destination)
        虽然copy和move一样可以做到这个功能但是函数move_uploaded_file()还提供一个功能,即检查并确保第一个参数filename指定的文件是否是合法上传文件。合法则移动,不合法则不执行任何操作返回false,发出一条警告。移动成功返回true。

        处理多文件上传:
          上传一个文件时全局数组$_FILES为一个二维数组,当使用多文件上传全局数组$_FILES已经变成一个三维数组,这样就可以存储多个上传文件的信息。

        文件的下载
          1.获取要下载的图片名(加上路径)
            $file="./uploads/".$_GET['name'];
          2.重设响应类型
            $info=getimagesize['mime'];
            header("content-type:".$info);改变响应类型

          3.指定下载的文件名
            header("content-disposition:attachment;filename=".$GET["name"]);

          4.指定文件的大小
            header("content-length:".filesize($file));
          5.响应内容
            readfile($file);

     1 <?php
     2 //文件上传函数
     3 function upload($path,$upfile,$typeList=array(),$maxSize=0){
     4     //定义返回信息数组
     5     $res = array(
     6                 "info"=>"",
     7                 "error"=>false
     8                 );
     9                 
    10     //格式化文件上传路径
    11     $path=rtrim($path,"/")."/";
    12     
    13     if($upfile['error']>0){
    14         switch($upfile['error']){
    15             case 1:
    16                 $info="上传文件的大小超出了约定值!";
    17                 break;
    18             case 2:
    19                 $info="上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。";
    20                 break;
    21             case 3:
    22                 $info="文件只被部分上传!";
    23                 break;
    24             case 4:
    25                 $info="没有上传任何文件。";
    26                 break;
    27             case 6:
    28                 $info="找不到临时文件夹。";
    29                 break;
    30             case 7:
    31                 $info="文件写入失败。";
    32                 break;
    33         }
    34         $res['info']="上传失败!原因:".$info;
    35         return $res;
    36     }
    37     
    38     //判断文件上传类型是否合法
    39     if(@$typeList && count(@$typeList)>0){
    40         
    41         if(!in_array($upfile['type'],$typeList)){
    42             $info="不被允许的上传文件类型!";
    43             $res['info']="上传失败!原因:".$info;
    44         return $res;
    45         }
    46     }else{
    47         $info="上传失败!原因:服务器没有设定允许上传的文件类型!";
    48         $res['info']="上传失败!原因:".$info;
    49         return $res;
    50     }
    51     
    52     //判断上传文件大小是否合法
    53     if($maxSize>0&&$upfile['size']>$maxsize){
    54         $info="上传文件大小越界!";
    55         $res['info']="上传失败!原因:".$info;
    56         return $res;
    57     }
    58     
    59     //随机一个文件名
    60     $pathinfo=pathinfo($upfile['name']);
    61     @$ext=$pathinfo['extension'];
    62     
    63     do{
    64         $newname=date("YmdHis",time()).rand(1000,9999).".".$ext;
    65     }while(file_exists($path.$newname));
    66     
    67     //执行上传文件的移动
    68     if(is_uploaded_file($upfile['tmp_name'])){
    69         if(move_uploaded_file($upfile['tmp_name'],$path.$newname)){
    70             $info="恭喜,上传成功!文件名:".$newname;
    71             $res['info']=$info;
    72             $res['error']=true;
    73             return $res;
    74         }else{
    75             $info="移动上传文件失败!";
    76             $res['info']="上传失败!原因:".$info;
    77         return $res;
    78         }
    79     }else{
    80         $info="不是有效的上传文件!";
    81         $res['info']="上传失败!原因:".$info;
    82         return $res;
    83     }
    84 }
    85 ?>



  • 相关阅读:
    Something I know about WebDynpro
    Details about support package implementation
    CRM Middleware Performance Topics
    Way to configure the logon navigaion layouts via Business Roles in CRM
    DOM 常用节点类型和方法
    第一届 xdef 会议日程
    去除百度音乐盒广告的chrome插件 持续更新
    从人人网抓取高校数据信息,包括,省份 高校 院系 (提供最终SQL文件下载)
    PHP 与 JSON
    解决HTTPS 发送请求走socket问题
  • 原文地址:https://www.cnblogs.com/yexiang520/p/5554877.html
Copyright © 2011-2022 走看看