php中的文件上传

    文件上传实际上就是在前段使用一个form表单提交本地文件到服务器,然后在服务器端将文件从临时目录转移到指定目录的过程。

1、php配置文件

php.ini文件中的file uploads部分定义了相关文件上传配置,

file_uploads = On 打开文件上传

upload_tmp_dir =临时目录

upload_max_filesize = 2M最大上传大小

max_file_uploads = 20单次最大上传文件数

2、前端表单

    <form action="test.php" method="post" enctype="multipart/form-data">
        <input type="file" name="myfile">
        <input type="submit" value="上传">
    </form>

当使用由文件上传控件的表单时,必须将form的enctype设置为"multipart/form-data"。

可以在客户端对上传文件的大小与类型进行限制:

<input type="hidden" name="MAX_FILE_SIZE" value="8096">
<input type="file" name="myfile" accept="image/jpeg,image/png">

3、后台处理


上传后会在服务器端得到一个$_FILES文件数组如下:

上传到服务器的临时文件默认保存在php.ini中upload_tmp_dir所设置的目录下,我们需要将文件移动到指定位置:

<?php
    header('Content-type:text/html;charset=utf-8');
    $myfile=$_FILES['myfile'];
    //获取文件数组['myfile']的属性tmp_name与name
    $tmp=$myfile['tmp_name'];
    $picname=$myfile['name'];
    //windows采用GBK编码,php采用utf-8编码,需要改变文件名的编码格式
    $picname=iconv('utf-8','GBK',$picname);
    //将零时文件$tmp移动到指定目录userpic并命名为$picname
    copy($tmp,"userpic/".$picname);

file_uploads=On开启HTTP上传
upload_tmp_dir临时文件保存目录
upload_max_filesize=2M最大上传文件大小
post_max_size=8MPOST方式传输最大数据值
max_file_uploads一次上传最大文件数
memory_limit=128M单线程最大内存占用量
max_excution_time=-1脚本解析所允许的最大执行时间(s),默认为-1未开启

4、错误处理


对file数组中的error属性进行判断处理:

$error=$myfile['myfile']['error'];
    if ($error==0){//为0,代表上传成功
        if (move_uploaded_file($tmp,"userpic/".$picname)) {
            echo "移动文件成功";
        }else{
            echo "移动文件失败";
        }
    }else{//不为0,匹配错误信息
        switch ($error){
            case 1:
                echo "超过文件最大上传限制";//php.ini中upload_max_filesize
                break;
            case 2:
                echo "超过表单文件大小限制";//HTML表单中MAX_FILE_SIZE选项
                break;
            case 3:
                echo "文件部分被上传";
                break;
            case 4:
                echo "未选择上传文件";
                break;
            case 7://文件写入失败
            case 8:
                echo "系统错误";
                break;
        }

    }

5、上传限制


在前端可以对上传的文件类型,大小进行限制:

<!--表单隐藏域对上传大小进行限制-->
<input type="hidden" name="MAX_FILE_SIZE" value="2097152">
<!--accept 对文件类型限制-->
<input type="file" name="myfile" accept="image/jpeg,image/png">

注意限制是以字节为单位

在服务器端也要做响应的限制:

$size=$myfile['size'];//获取文件大小
$MaxSize=2097152;//设置最大允许字节
$type=$myfile['type'];//获取图片类型
$AllowTypr=array('image/jpeg','image/png','image/gif');//允许类型数组
if ($error==0){//为0,代表上传成功
    if ($size>$MaxSize){
        echo "<script>alert('文件大小超过限制');</script>";
        echo "<script>history.back(1);</script>";
        exit();
    }
    if (!in_array($type,$AllowTypr)){
        echo "<script>alert('请上传正确图片类型');</script>";
        echo "<script>history.back(1);</script>";
        exit();
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值