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  ?>

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值