• 技术文章 >后端开发 >php教程

    php文件上传相关限制问题

    伊谢尔伦伊谢尔伦2017-06-27 14:11:59原创816
    上传相关限制

    1 客户端限制

    <form action="doAction2.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="101321" />
    请选择您要上传的文件:
    <input type="file" name="myFile" accept="image/jpeg,image/gif,text/html"/><br/>
    <input type="submit" value="上传"/>
    </form>

    这里用input的属性对上传文件的大小和类型进行了限制,但是个人感觉:一,html代码是“可见的”;二,常不起作用(没找到原因,但因为第一个我也想放弃它,知道就好。

    2 服务器端限制

    主要限制大小和类型,再有就是方式。

    <?php
    header('content-type:text/html;charset=utf-8');
    //接受文件,临时文件信息
    $fileinfo=$_FILES["myFile"];//降维操作
    $filename=$fileinfo["name"];
    $tmp_name=$fileinfo["tmp_name"];
    $size=$fileinfo["size"];
    $error=$fileinfo["error"];
    $type=$fileinfo["type"];
    //服务器端设定限制
    $maxsize=10485760;//10M,10*1024*1024
    $allowExt=array('jpeg','jpg','png','tif');//允许上传的文件类型(拓展名
    $ext=pathinfo($filename,PATHINFO_EXTENSION);//提取上传文件的拓展名
    //目的信息
    $path="uploads";
    if (!file_exists($path)) {   //当目录不存在,就创建目录
        mkdir($path,0777,true);
        chmod($path, 0777);
    }
    //$destination=$path."/".$filename;
    //得到唯一的文件名!防止因为文件名相同而产生覆盖
    $uniName=md5(uniqid(microtime(true),true)).$ext;//md5加密,uniqid产生唯一id,microtime做前缀
    if ($error==0) {
        if ($size>$maxsize) {
            exit("上传文件过大!");
        }
        if (!in_array($ext, $allowExt)) {
            exit("非法文件类型");
        }
        if (!is_uploaded_file($tmp_name)) {
            exit("上传方式有误,请使用post方式");
        }
        if (@move_uploaded_file($tmp_name, $uniName)) {//@错误抑制符,不让用户看到警告
            echo "文件".$filename."上传成功!";
        }else{
            echo "文件".$filename."上传失败!";
        }
        //判断是否为真实图片(防止伪装成图片的病毒一类的
        if (!getimagesize($tmp_name)) {//getimagesize真实返回数组,否则返回false
            exit("不是真正的图片类型");
        }
    }else{
        switch ($error){
            case 1:
                echo "超过了上传文件的最大值,请上传2M以下文件";
                break;
            case 2:
                echo "上传文件过多,请一次上传20个及以下文件!";
                break;
            case 3:
                echo "文件并未完全上传,请再次尝试!";
                break;
            case 4:
                echo "未选择上传文件!";
                break;
            case 7:
                echo "没有临时文件夹";
                break;
        }
    }

    这里,具体实现都有注释,每一步其实都可以自己试试的,很有趣。

    3 封装

    函数

    <?php
    function uploadFile($fileInfo,$path,$allowExt,$maxSize){
    $filename=$fileInfo["name"];
    $tmp_name=$fileInfo["tmp_name"];
    $size=$fileInfo["size"];
    $error=$fileInfo["error"];
    $type=$fileInfo["type"];
    //服务器端设定限制
    $ext=pathinfo($filename,PATHINFO_EXTENSION);
    //目的信息
    if (!file_exists($path)) {   
        mkdir($path,0777,true);
        chmod($path, 0777);
    }
    $uniName=md5(uniqid(microtime(true),true)).'.'.$ext;
    $destination=$path."/".$uniName;
    if ($error==0) {
        if ($size>$maxSize) {
            exit("上传文件过大!");
        }
        if (!in_array($ext, $allowExt)) {
            exit("非法文件类型");
        }
        if (!is_uploaded_file($tmp_name)) {
            exit("上传方式有误,请使用post方式");
        }
        //判断是否为真实图片(防止伪装成图片的病毒一类的
        if (!getimagesize($tmp_name)) {//getimagesize真实返回数组,否则返回false
            exit("不是真正的图片类型");
        }
        if (@move_uploaded_file($tmp_name, $destination)) {//@错误抑制符,不让用户看到警告
            echo "文件".$filename."上传成功!";
        }else{
            echo "文件".$filename."上传失败!";
        }
        
    }else{
        switch ($error){
            case 1:
                echo "超过了上传文件的最大值,请上传2M以下文件";
                break;
            case 2:
                echo "上传文件过多,请一次上传20个及以下文件!";
                break;
            case 3:
                echo "文件并未完全上传,请再次尝试!";
                break;
            case 4:
                echo "未选择上传文件!";
                break;
            case 7:
                echo "没有临时文件夹";
                break;
        }
    }
    return $destination;
    }

    调用

    <?php
    header('content-type:text/html;charset=utf-8');
    $fileInfo=$_FILES["myFile"];
    $maxSize=10485760;//10M,10*1024*1024
    $allowExt=array('jpeg','jpg','png','tif');
    $path="uploads";
    include_once 'upFunc.php';
    uploadFile($fileInfo, $path, $allowExt, $maxSize);

    以上就是php文件上传相关限制问题的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 问题 限制
    上一篇:php实现文件上传原理和报错原因详解 下一篇:如何实现php多文件上传封装
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 一文聊聊php5.4的特性【总结】• PHP实现的拖拽图形验证,简单易用!• PHP常量两种定义方法:define和const有什么区别• PHP操作文件问答_PHP教程• PHP重定向的3种方式_PHP教程
    1/1

    PHP中文网