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、代码

完整的文件上传实例

 <?php
$sfile=$_FILES['img']['tmp_name'];
$uploaddir='uploads';
$filesize=$_FILES['img']['size']; //创建上传日期目录
$year=date('Y');
$month=date('m');
$day=date('d');
$datedir=$uploaddir.'/'.$year.'-'.$month.'-'.$day;
if(!file_exists($datedir)){
mkdir($datedir);
} // 获取文件后缀
$farr=explode('.',$_FILES['img']['name']);
$fext=array_pop($farr); //加工文件名
$frand=time().mt_rand(); //最终上传路径和文件名
$dfile=$datedir.'/'.$frand.'.'.$fext; //限制文件上传大小(1M)
$sizes=1*1024*1024; //限制文件上传类型
$allows=array('jpg','png','gif'); //文件上传移动操作
if(in_array($fext,$allows)){
if($filesize<=$sizes){
move_uploaded_file($sfile,$dfile);
}else{
echo "<script>alert('文件大小超过1M!')</script>";
}
}else{
echo "<script>alert('文件类型不允许,只允许上传png|jpg|gif!')</script>";
}
?>

文件上传表单

 <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
font-family: 微软雅黑;
}
</style>
</head>
<body>
<h3>文件上传:</h3>
<form action="upload.php" method='post' enctype='multipart/form-data'>
<p>请选择文件:</p>
<p>
<input type="file" name="img" id="">
</p> <p>
<input type="submit" value="上传">
</p>
</form>
</body>
</html>

copyDir复制完整目录

 <?php
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);
}
}
}
} copyDir('img','img2');
?>

moveDir移动目录

 <?php
//删除目录
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);
} // 复制目录
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);
}
}
}
} //移动目录
function moveDir($dir1,$dir2){
copyDir($dir1,$dir2);
delDir($dir1);
} $dir1='img';
moveDir($dir1,'img3');
?>

clearDir清空目录

 <?php
$dir='imgs'; function clearDir($dir){
$files=scandir($dir); foreach($files as $key=>$val){
if($key>1){
$file=$dir.'/'.$val; if(is_dir($file)){
clearDir($file);
rmdir($file);
}else{
unlink($file);
}
}
}
} clearDir($dir);
?>

delDir完整删除目录

 <?php
$dir='imgs'; 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);
} delDir($dir);
?>
 

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

  1. jquery插件课程2 放大镜、多文件上传和在线编辑器插件如何使用

    jquery插件课程2 放大镜.多文件上传和在线编辑器插件如何使用 一.总结 一句话总结:插件使用真的还是比较简单的,引包,初始化,配置参数(json),配置数据(json),而后两步不是必须的.而且 ...

  2. 使用PLupload在同一页面中进行多个不同类型上传解决方案和一次多文件上传的注意事项

    首先感谢,http://www.cnblogs.com/2050/p/3913184.html 这篇文章作者. 在使用PLUpload之前个人先封装了一些常用配置,并且将success与error做为 ...

  3. Dajngo——10 请求与响应 文件上传 GET和POST请求 类视图

    Dajngo——10 HttpRequest对象 HttpResponse对象及子类 form标签中的GET和POST GET提交方式 POST提交方式 request得GET和POST属性 文件上传 ...

  4. Ubuntu 14.10 下Hadoop FTP文件上传配置

    最近老板提出一个需求,要用Hadoop机群管理生物数据,并且生物数据很多动辄几十G,几百G,所以需要将这些数据传到HDFS中,在此之前搭建了HUE用来图形化截面管理HDFS数据,但是有个问题,上面使用 ...

  5. feign多文件上传

    参考地址:https://www.cnblogs.com/standup/p/9090113.html https://www.cnblogs.com/standup/p/9093753.html 1 ...

  6. php之文件上传简单介绍

    要声明的form表单格式 <form action="act.php" method="post" enctype="multipart/for ...

  7. express 模板 及 文件上传

    express 的三大功能: 1. 提供了静态服务(所谓的根目录) let express = require("express"); let app = express(); a ...

  8. Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie)

    Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie) 一.HttpRequest对象 #HttpRequest ...

  9. Javaweb学习笔记10—文件上传与下载

    今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容.       ...

随机推荐

  1. final使用方法

     final的作用随着所修饰的类型而不同 1.final修饰类中的属性或者变量 不管属性是基本类型还是引用类型.final所起的作用都是变量里面存放的"值"不能变. 这个值,对 ...

  2. Qt源码编译

    Qt源码编译 eryar@163.com Key words. Qt, 源码编译 1.Introduction 随着Qt版本升级,源码编译出来的库体积越来越大.如果只是用Qt来做GUI,Qt提供的预编 ...

  3. dlmalloc 2.8.6 源代码具体解释(5)

    本文章由vector03原创, 转载请注明出处. 邮箱地址: mmzsmm@163.com, 欢迎来信讨论.     3. 分配及实现 本章节介绍dlmalloc的分配算法和实现.由于存在多mspac ...

  4. UIButton文字居左显示

    题外话:时间依然过的非常快.不知不觉2015年就过去一半了.感觉自己好像没有大的改变.仅仅能感叹时间飞逝,却不能有所收获. 我从来都不是一个安于现状的人,改变自己的想法从未停止过.我想大多数人都跟我有 ...

  5. Elasticsearch之REST

    REST 简介-定义 REST (REpresentation State Transfer)描述了一个架构样式的网络系统,比如 web 应用程序.它首次出现在 2000 年 Roy Fielding ...

  6. 游标 scroll

    scroll表示可随意移动游标指针(否则只能向前)

  7. ajax的使用(一)

        ajax向服务器异步发送和接受数据,然后用JavaScript解析.Ajax核心规范的名称继承于你用来建立和发送请求的JavaScript对象:XMLHttpRequest.这个规范有两个等级 ...

  8. element-ui一些注意点:

    1.change ($event,“你要传递的其他值”),使用el-select组件时,想传递多个值. 或者 在el-option上的value属性上传递对象 eg: :value="{'c ...

  9. JS原生方法被覆盖后的恢复办法

    alert 被覆盖 今天装修博客园,调试了下JS代码发现 alert() 方法被官方覆盖了,查看源码得知 alert 的功能被替换成了 console.log. 恢复 var _frame = doc ...

  10. Java遍历目录下全部文件并替换指定字符串

    应用场景:比方有一个深层次的文件目录结构,如:javaAPI 每一个文件中面都有同样的内容,而我们要统一改动为其它内容.上千个文件假设一个个改动显得太不明智. import java.io.Buffe ...