zoukankan      html  css  js  c++  java
  • php课程 10-35 php实现文件上传的注意事项是什么

    php课程 10-35 php实现文件上传的注意事项是什么

    一、总结

    一句话总结:记得限制大小和类型,还有就是用move_uploaded_file($sfile,$dfile);函数把上传到php临时目录的文件拷出来,存在想存的位置,还有就是用日期文件夹,时间轴+随机数的方式解决文件重名和乱码的问题。

    1、递归删除文件和核心操作是什么?

    判断是目录还是文件,如果是目录就接着递归,是文件就删除,这应该算作是最简单的递归了
    这里递归的结束条件是什么:文件(删除文件)

     2 $dir='imgs';
     3 
     4 function delDir($dir){
     5     $files=scandir($dir);
     6 
     7     foreach($files as $key=>$val){
     8         if($key>1){
     9             $file=$dir.'/'.$val;
    10 
    11             if(is_dir($file)){
    12                 delDir($file);
    13             }else{
    14                 unlink($file);
    15             }
    16         }
    17     }
    18 
    19     rmdir($dir);
    20 }
    21 
    22 delDir($dir);

    2、php可以做什么?

    目录操作,文件操作,图片操作等等等等,office系列应该也是行的

    3、目录只能创建不能复制,那么如何实现里面有文件的目录的复制?

    递归,目录创建,文件复制

     2 function copyDir($dir1,$dir2){
     3     mkdir($dir2);
     4 
     5     $files=scandir($dir1);
     6 
     7     foreach($files as $key=>$val){
     8         if($key>1){
     9             $file1=$dir1.'/'.$val;
    10             $file2=$dir2.'/'.$val;
    11 
    12             if(is_dir($file1)){
    13                 copyDir($file1,$file2);
    14             }else{
    15                 copy($file1,$file2);
    16             }
    17         }
    18     }
    19 }
    20 
    21 copyDir('img','img2');

    4、php文件上传函数用什么?

    move_uploaded_file($sfile,$dfile)会检查$sfile是不是上传上来的文件,否则它不干活
    其实这个函数的作用和copy(复制文件)的作用很像

    35         move_uploaded_file($sfile,$dfile);

    5、原生php图片上传怎么操作?

     2 $sfile=$_FILES['img']['tmp_name'];
     3 $uploaddir='uploads';
     4 $filesize=$_FILES['img']['size'];
     5 
     6 //创建上传日期目录
     7 $year=date('Y');
     8 $month=date('m');
     9 $day=date('d');
    10 $datedir=$uploaddir.'/'.$year.'-'.$month.'-'.$day;
    11 if(!file_exists($datedir)){
    12     mkdir($datedir);
    13 }
    14 
    15 // 获取文件后缀
    16 $farr=explode('.',$_FILES['img']['name']);
    17 $fext=array_pop($farr);
    18 
    19 //加工文件名
    20 $frand=time().mt_rand();
    21 
    22 //最终上传路径和文件名
    23 $dfile=$datedir.'/'.$frand.'.'.$fext;
    24 
    25 
    26 //限制文件上传大小(1M)
    27 $sizes=1*1024*1024;
    28 
    29 //限制文件上传类型
    30 $allows=array('jpg','png','gif');
    31 
    32 //文件上传移动操作
    33 if(in_array($fext,$allows)){
    34     if($filesize<=$sizes){
    35         move_uploaded_file($sfile,$dfile);
    36     }else{
    37         echo "<script>alert('文件大小超过1M!')</script>";
    38     }
    39 }else{
    40     echo "<script>alert('文件类型不允许,只允许上传png|jpg|gif!')</script>";
    41 }

    6、上传文件的注意事项是什么?

    必须在form中表明我们上传的是文件,不然form表单传不了这么大的东西,或者说这种类型的东西

    14     <form action="upload.php" method='post' enctype='multipart/form-data'>

    7、怎么解决图片上传是的文件同名覆盖和中文乱码的问题?

    先创建上传日期目录
    然后是时间戳加随机数 time().mt_rand();
    但是这样不行,大家都是这样想的,容易被黑,把用户上传的图片都搞走,所以可以在加一点自己特色的字串即可

    8、文件上传中需要限制哪些操作?

    类别和大小

    9、如何获取用户上传的文件的各种信息?

    用$_FILES,里面有大小,类型,上传位置等一系列的信息

     2 $sfile=$_FILES['img']['tmp_name'];
     3 $uploaddir='uploads';
     4 $filesize=$_FILES['img']['size'];

    10、如何判断一个值在不在数组中(如何限制图片类型)?

    in_array()

    29 //限制文件上传类型
    30 $allows=array('jpg','png','gif');
    31 
    32 //文件上传移动操作
    33 if(in_array($fext,$allows)){

    二、php实现文件上传的注意事项是什么

    1、相关知识

    目录操作:
    1.遍历目录
    opendir();
    readdir();
    closedir();
    scandir();

    2.创建空目录
    mkdir();

    3.删除空目录
    rmdir();

    4.删除完整目录(delDir)
    scandir();

    function delDir($dir){
        $files=scandir($dir);
        foreach($files as $key=>$val){
            if($key>1){
                $file=$dir.'/'.$val;

                if(is_dir($file)){
                    delDir($file);
                }else{
                    unlink($file);
                }
            }
        }
        rmdir($dir);
    }

    5.复制完整目录(cpDir)
    function copyDir($dir1,$dir2){
        mkdir($dir2);
        $files=scandir($dir1);
        foreach($files as $key=>$val){
            if($key>1){
                $file1=$dir1.'/'.$val;
                $file2=$dir2.'/'.$val;

                if(is_dir($file1)){
                    copyDir($file1,$file2);
                }else{
                    copy($file1,$file2);
                }
            }
        }
    }

    6.移动完整目录(mvDir)
    copyDir();
    delDir();

    文件上传:
    move_uploaded_file($sfile,$dfile);

    文件上传错误码:
    0 #正确
    1 #上传大小超过了input[type=file]的文件上传框最大大小
    4 #没有上传任何文件

    post限制:
    post_max_size = 3072M

    upload限制:
    upload_max_filesize = 3072M

     

    2、代码

    完整的文件上传实例

     1 <?php 
     2 $sfile=$_FILES['img']['tmp_name'];
     3 $uploaddir='uploads';
     4 $filesize=$_FILES['img']['size'];
     5 
     6 //创建上传日期目录
     7 $year=date('Y');
     8 $month=date('m');
     9 $day=date('d');
    10 $datedir=$uploaddir.'/'.$year.'-'.$month.'-'.$day;
    11 if(!file_exists($datedir)){
    12     mkdir($datedir);
    13 }
    14 
    15 // 获取文件后缀
    16 $farr=explode('.',$_FILES['img']['name']);
    17 $fext=array_pop($farr);
    18 
    19 //加工文件名
    20 $frand=time().mt_rand();
    21 
    22 //最终上传路径和文件名
    23 $dfile=$datedir.'/'.$frand.'.'.$fext;
    24 
    25 
    26 //限制文件上传大小(1M)
    27 $sizes=1*1024*1024;
    28 
    29 //限制文件上传类型
    30 $allows=array('jpg','png','gif');
    31 
    32 //文件上传移动操作
    33 if(in_array($fext,$allows)){
    34     if($filesize<=$sizes){
    35         move_uploaded_file($sfile,$dfile);
    36     }else{
    37         echo "<script>alert('文件大小超过1M!')</script>";
    38     }
    39 }else{
    40     echo "<script>alert('文件类型不允许,只允许上传png|jpg|gif!')</script>";
    41 }
    42  ?>

    文件上传表单

     1 <!doctype html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6     <style>
     7         *{
     8             font-family: 微软雅黑;
     9         }
    10     </style>
    11 </head>
    12 <body>
    13     <h3>文件上传:</h3>
    14     <form action="upload.php" method='post' enctype='multipart/form-data'>
    15         <p>请选择文件:</p>
    16         <p>
    17             <input type="file" name="img" id="">
    18         </p>
    19 
    20         <p>
    21             <input type="submit" value="上传">
    22         </p>
    23     </form>    
    24 </body>
    25 </html>

    copyDir复制完整目录

     1 <?php 
     2 function copyDir($dir1,$dir2){
     3     mkdir($dir2);
     4 
     5     $files=scandir($dir1);
     6 
     7     foreach($files as $key=>$val){
     8         if($key>1){
     9             $file1=$dir1.'/'.$val;
    10             $file2=$dir2.'/'.$val;
    11 
    12             if(is_dir($file1)){
    13                 copyDir($file1,$file2);
    14             }else{
    15                 copy($file1,$file2);
    16             }
    17         }
    18     }
    19 }
    20 
    21 copyDir('img','img2');
    22  ?>

    moveDir移动目录

     1 <?php 
     2 //删除目录
     3 function delDir($dir){
     4     $files=scandir($dir);
     5     foreach($files as $key=>$val){
     6         if($key>1){
     7             $file=$dir.'/'.$val;
     8 
     9             if(is_dir($file)){
    10                 delDir($file);
    11             }else{
    12                 unlink($file);
    13             }
    14         }
    15     }
    16     rmdir($dir);
    17 }
    18 
    19 // 复制目录
    20 function copyDir($dir1,$dir2){
    21     mkdir($dir2);
    22     $files=scandir($dir1);
    23     foreach($files as $key=>$val){
    24         if($key>1){
    25             $file1=$dir1.'/'.$val;
    26             $file2=$dir2.'/'.$val;
    27 
    28             if(is_dir($file1)){
    29                 copyDir($file1,$file2);
    30             }else{
    31                 copy($file1,$file2);
    32             }
    33         }
    34     }
    35 }
    36 
    37 //移动目录
    38 function moveDir($dir1,$dir2){
    39     copyDir($dir1,$dir2);
    40     delDir($dir1);
    41 }
    42 
    43 $dir1='img';
    44 moveDir($dir1,'img3');
    45  ?>

    clearDir清空目录

     1 <?php 
     2 $dir='imgs';
     3 
     4 function clearDir($dir){
     5     $files=scandir($dir);
     6 
     7     foreach($files as $key=>$val){
     8         if($key>1){
     9             $file=$dir.'/'.$val;
    10 
    11             if(is_dir($file)){
    12                 clearDir($file);
    13                 rmdir($file);
    14             }else{
    15                 unlink($file);
    16             }
    17         }
    18     }
    19 }
    20 
    21 clearDir($dir);
    22  ?>

    delDir完整删除目录

     1 <?php 
     2 $dir='imgs';
     3 
     4 function delDir($dir){
     5     $files=scandir($dir);
     6 
     7     foreach($files as $key=>$val){
     8         if($key>1){
     9             $file=$dir.'/'.$val;
    10 
    11             if(is_dir($file)){
    12                 delDir($file);
    13             }else{
    14                 unlink($file);
    15             }
    16         }
    17     }
    18 
    19     rmdir($dir);
    20 }
    21 
    22 delDir($dir);
    23  ?>
     
  • 相关阅读:
    AngularJS使用angular-formly进行表单验证
    AngularJS使用ngMessages进行表单验证
    AngularJS订阅API服务
    AngularJS中module的导入导出
    Gulp快速入门
    AngularJS过滤排序思路
    AngularJS表单验证,手动验证或自动验证
    AngularJS的增删改查、state嵌套案例,不涉及服务端
    前端使用AngularJS的$resource,后端ASP.NET Web API,实现分页、过滤
    前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9311055.html
Copyright © 2011-2022 走看看