PHP 文件上传

PHP 基础

这里教大家一个PHP文件上传的方法,并返回网络文件的位置

操作环境

  • 操作系统:Win7
  • 服务器工具: XAMPP

直接上源代码,后面写写使用的方法

/**
     *  上传文件的方法
     * 第一个参数 要过滤的数据类型 必须是数组
     * 第二个参数 前端上传时用的 name 名称  例:<input type='file' name='file'>为例
     * 第三个参数 文件上传后要存放的位置 以调用该方法的文件为基础
     * 第四个参数 设置一个文件名称 $_FILES[$postname]["name"]  这个名称就是上传文件的名称,建议修改
     * 第五个参数 设置要上传文件的大小 默认 2M
     * 第六个参数 上传了文件后需要一个文件在网络上的地址 最后 / 不能省略 
     */
    function uploadFile($arrayinfo){
        $status = 0;
        $msg = "";
        $data = null;

        // 六个参数 默认值
        $init = array(
            'filter'=>array(),                      // 过滤类型,默认不过滤
            'postname'=>'file',                     // 前台上传的name名称
            'filedir'=>'./uploads/',                // 要上传的文件夹
            'filename'=>$_FILES['file']["name"],    // 要上传的文件名
            'filesize'=>1024*1024*2,                // 上传文件的大小上限
            'url'=>'https://www.xialijun.top/',     // 默认网络图片地址
        );
        // 后面的覆盖前面的  修改一下参数
        $init = array_merge($init,$arrayinfo);
        // 开始过滤
        $filter = in_array($_FILES[$init['postname']]["type"],$init['filter']);

        if($filter && ($_FILES[$init['postname']]["size"] < $init['filesize']) ){

            if($_FILES[$init['postname']]["error"]>0){
                switch ($_FILES[$init['postname']]['error']) {
                    case 1:
                        $str = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                        break;
                    case 2:
                        $str = '上传的文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
                        break;
                    case 3:
                        $str = '文件只有部分被上传';
                        break;
                    case 4:
                        $str = '没有文件被上传';
                        break;
                    case 6:
                        $str = '找不到临时文件夹';
                        break;
                    case 7:
                        $str = '文件写入失败';
                        break;
                }
                $msg = $str;
            }
            else{
                // 返回文件的后缀名
                $suffix = explode('.', $_FILES[$init['postname']]["name"]);
                $suffix = $suffix[count($suffix)-1];
                // 判断文件是否存在
                if(file_exists($init['filedir'].$_FILES[$init['postname']]["name"])){
                    echo $_FILES[$init['postname']]["name"]." 上传文件已存在 ";
                }
                else{
                    // 上传的文件被移动到 指定位置
                    @move_uploaded_file($_FILES[$init['postname']]["tmp_name"],$init['filedir'].$init['filename'].".".$suffix);
                    // 设置状态证明文件上传成功
                    $status = 1;  
                    // 上传成功的提示
                    $msg = "上传成功";
                    // 返回文件的网络地址
                    $data = $init['url'].$init['filename'].".".$suffix;
                }
            }
        }
        else{
            $str =$_FILES[$init['postname']]["type"]."     上传文件有问题";

            if(false){
                $str = $_FILES[$init['postname']]["name"]."    不符合要求<br>";
                $str .= "可能的情况是:  <br>";
                $str .= "1.文件大于5M;<br>";
                $str .= "2.文件的类型不符合要求    当前的类型是: ".$_FILES[$init['postname']]["type"].";<br>";
                 $str .= "支持的类型有:<br>";
                foreach ($init['filter'] as $value) {
                     $str .= $value."<br>";
                }
            }

            $msg = $str;
        }

        return array('status'=>$status,'msg'=>$msg,'data'=>$data);
    }

使用方法

/**
    *   这里就是把上传的参数设置好后传入  上面的方法中
    */
    $init = array(
            'filter'=>array('image/jpeg'),                 // 过滤类型,默认不过滤
            'postname'=>'p',                     // 前台上传的name名称
            'filedir'=>'../uploads/',                // 要上传的文件夹
            'filename'=>time().'_'.rand(10000,99999),    // 要上传的文件名
            'url'=>'http://127.0.0.1/uploads/',     // 默认网络图片地址
     );
    // 开始上传文件
    $res = uploadFile($init);
    // 上传完成后,查看上传的是否正确
    var_dump($res);

感谢查看,多关注,多评论,谢谢!!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值