4、php文件上传 上传原理 单文件上传 多文件上传

2019年8月3日01:07:42 评论 11 次浏览

1、文件上传原理

上传文件,就是将文件从浏览器端传到服务器端;
上传文件,必须使用

标记来向服务器端发数据;
上传文件,
标记的method属性值必须是POST
上传文件,
标记的enctype属性值必须是multipart/form-data
上传文件,必须使用标记实现。

<form name="form1" method="post" enctype="multipart/form-data" action="upload.php">
上传图片1:<input type="file" name="uploadFile[]"><br>
上传图片2:<input type="file" name="uploadFile[]"><br>
上传图片3:<input type="file" name="uploadFile[]"><br>
<input type="submit" value="提交">
<input type="hidden" name="token" value="upload">
</form>

4、php文件上传 上传原理 单文件上传 多文件上传

2、超全局变量数组 $_FILES

\(_POST数组中保存的是普通表单元素数据;
\)_FILES数组中保存的是上传文件的信息。
4、php文件上传 上传原理 单文件上传 多文件上传

3、上传文件错误代码

4、php文件上传 上传原理 单文件上传 多文件上传
提示:0、1、4比较重要。

4、查看上传的临时文件位置

上传文件的默认临时目录,如果没有指定php.ini配置项upload_tmp_dir的值,则使用操作系统临时目录(c:\windows\temp)。通过phpinfo()函数查看。
为什么在 c:\windows\temp 中看不到上专文件呢?因为临时文件是短暂存在的,也就是在脚本执行完毕后,就消失了。
4、php文件上传 上传原理 单文件上传 多文件上传

5、将上传文件移动到新位置

描述:本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。最好在临时文件没有消失前移动
语法:

bool move_uploaded_file ( string $filename , string $destination )

参数:\(filename,指定上传的临时文件名;\)destination,指定新的文件名路径;
注意:如果文件已经存在,则会覆盖操作。

6、上传文件的相关配置(php.ini)

upload_max_filesize配置:上传单个文件的大小限制,默认为2MB。
post_max_size配置:规定上传多个文件的总大小,默认为8MB。
max_file_uploads配置:规定最多上传的文件个数,默认为20个。
4、php文件上传 上传原理 单文件上传 多文件上传
4、php文件上传 上传原理 单文件上传 多文件上传

7、获取文件路径信息 pathinfo()

描述:返回文件路径的信息 ;

mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )

参数:
\(path,要解析的路径。
\)options,如果省略,返回全部单元;
PATHINFO_DIRNAME,目录名称;
PATHINFO_BASENAME,文件名称;
PATHINFO_EXTENSION,扩展名;
PATH_FILENAME,文件名。

8、检查数组中是否存在某个值 in_array()

描述:检查数组中是否存在某个值
语法:

bool in_array ( mixed $needle , array $arr )

参数:\(needle检索的值,\)arr原数组。

9、生成ID uniqid()

描述:生成一个ID
语法:

string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )

参数:
\(prefix前缀字符串,如果省略,返回字符串长度为13;
\)more_entropy后缀字符串,如果为true,返回字符串长度为23。
4、php文件上传 上传原理 单文件上传 多文件上传

实例:单个文件上传

1、上传表单制作upload.html

4、php文件上传 上传原理 单文件上传 多文件上传

2、上传文件的程序处理upload.php

4、php文件上传 上传原理 单文件上传 多文件上传

4、php文件上传 上传原理 单文件上传 多文件上传

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传原理</title>
</head>
<body>
<form name="form1" method="post" enctype="multipart/form-data" action="upload.php">
上传图片:<input type="file" name="uploadFile">
<input type="submit" value="提交">
<input type="hidden" name="token" value="upload">
</form>
</body>
</html>
<?php
//判断表单是否合法提交
if(isset($_POST['token']) && $_POST['token']=='upload')
{
    /*
        (1)判断上传文件有没有错误发生
        (2)判断上传文件是否超过2MB大小
        (3)判断上传文件是不是图片
        (4)移动临时文件到虚拟目录中:取出文件扩展名、文件名性
     */

    //(1)判断上传文件有没有错误发生
    if($_FILES['uploadFile']['error']!=0)
    {
        echo "<h2>上传文件发生了错误!</h2>";
        die();
    }

    //(2)判断上传文件大小是否超过2MB
    if($_FILES['uploadFile']['size']>2*1024*1024)
    {
        echo "<h2>文件大小超出php.ini中的限制!</h2>";
        die();
    }

    //(3)判断上传文件是不是图片
    $arr = array('image/jpeg','image/png','image/gif');
    $type = $_FILES['uploadFile']['type'];
    if(!in_array($type,$arr))
    {
        echo "<h2>必须上传图像!</h2>";
        die();
    }

    //(4)移动临时文件,到./upload目录中
    $ext = pathinfo($_FILES['uploadFile']['name'],PATHINFO_EXTENSION); //jpg
    $tmp_name = $_FILES['uploadFile']['tmp_name'];
    $dst_name = "./upload/".uniqid().".".$ext;
    move_uploaded_file($tmp_name,$dst_name);
    echo "<h2>文件上传成功</h2>";
    die();
}else
{
    echo "非法操作";
}

实例:多个文件 上传

1、制作上传表单

4、php文件上传 上传原理 单文件上传 多文件上传

2、上传多个文件的程序处理

4、php文件上传 上传原理 单文件上传 多文件上传

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传原理</title>
</head>
<body>
<form name="form1" method="post" enctype="multipart/form-data" action="upload.php">
上传图片1:<input type="file" name="uploadFile[]"><br>
上传图片2:<input type="file" name="uploadFile[]"><br>
上传图片3:<input type="file" name="uploadFile[]"><br>
<input type="submit" value="提交">
<input type="hidden" name="token" value="upload">
</form>
</body>
</html>
<?php
//判断表单是否合法提交
if(isset($_POST['token']) && $_POST['token']=='upload')
{
    print_r($_FILES);
    //将三维数组,转成二维数组
    $arrs = $_FILES['uploadFile'];
    //循环判断,只需要移动有文件上传的
    foreach($arrs['name'] as $key=>$name)
    {
        //如果文件不则,则移动文件
        if($name != "")
        {
            $ext = pathinfo($name,PATHINFO_EXTENSION);
            $tmp_name = $arrs['tmp_name'][$key];
            $dst_name = "./upload/".uniqid().".".$ext;
            move_uploaded_file($tmp_name,$dst_name);
        }
    }
}else
{
    echo "非法操作";
}
继续阅读
weinxin
加我微信
微信扫一扫,加我微信好友,共同交流,共同进步! (备注:焦国强博客)
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: