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

被折叠的 条评论
为什么被折叠?



