PHP上传文件

在很多网站中都需要上传文件,例如:图片、文档。下面我来分享一下我写的上传文件的方法。我是用类写的。
思路是:
首先获取上传的文件名称,对其进行重命名(防止文件重复)。
然后使用move_uploaded_file()函数将文件放置到的要上传的位置。
要注意html文件在上传文件是表单里要使用enctype=”multipart/form-data”这个属性。你需要先建立上传的文件夹(我的是upload文件夹)。
Upload.class.php 文件

<?php

/*
上传文件类
*/
    class Upload{
        public static $error;  //记录错误信息
        private static $allow = array('gif','png','jpg','jgeg');   //允许上传的文件类型,可以自己在添加

        /*
         * 上传文件方法,并返回文件的路径:路径是upload/,对文件必须进行重命名(以文件类型开始,后面随机(时间戳)+5位随机数
         * @param1 array $_FILES,所有获得的提交的文件的数组
         * @return array,所有文件上传保存的文件名
         */
        public static function uploads($file){
            //保存返回的路径
            $path = array();

            if(empty($file)){
                self::$error = '没有上传文件';
                return false;
            }

            foreach($file as $f){
                //判断是否存在同名文件上传
                $length = is_array($f['name']) ? count($f['name']) : 0;

                if($length != 0){
                    //有同名文件上传(表单采用数组方式提交)
                    for($i = 0;$i< $length;$i++){
                        //对文件进行错误进行判断
                        if($f['error'] != 0){
                            self::checkError($f['error'][$i]);
                            return false;
                        }else{
                            //判断文件后缀
                            if(!self::checkExtension($f['name'][$i])){
                                //不合法的后缀名
                                self::$error = '文件类型不合法,允许的文件类型是:' . implode('|',self::$allow);
                                return false;
                            }

                            //文件没有问题
                            $per_path = self::getFullName($f['type'][$i],$f['name'][$i]);
                            move_uploaded_file($f['tmp_name'][$i],upload.'/'. $per_path);
                            $path[] = $per_path;
                        }
                    }
                }else{
                    //用户上传的文件没有同名的
                    //对文件进行错误进行判断
                    if($f['error'] != 0){
                        self::checkError($f['error']);
                        return false;
                    }else{
                        //判断文件后缀
                        if(!self::checkExtension($f['name'])){
                            //不合法的后缀名
                            self::$error = '文件类型不合法,允许的文件类型是:' . implode('|',self::$allow);
                            return false;
                        }

                        //判断成功
                        $per_path = self::getFullName($f['type'],$f['name']);
                        move_uploaded_file($f['tmp_name'],upload.'/'. $per_path); 
                        $path[] = $per_path;
                    }
                }
            }

            //返回路径
            return $path;

        }

        /*
         * 获取文件的名字方法
         * @param1 string $type,文件的MIME类型
         * @param2 string $name,文件本身的全名
         * @return string,完整的文件名字
         */
        private static function getFullName($type,$name){
            //获得图片类型
            $type = substr($type,0,strpos($type,'/'));

            //得到文件后缀名
            $ext = substr($name,strrpos($name,'.'));

            //拼凑全名
            return $type . '_' . time() . rand(10000,99999) . $ext;
        }

        /*
         * 根据错误代码进行错误处理方法
         * @param1 int $error,错误代码
         */
        private static function checkError($error){
            //对文件进行错误进行判断
                switch($error){
                    case 1:
                        self::$error = '文件超过服务器允许大小,最大允许' . ini_get('upload_max_filesize');
                        return false;
                    case 2:
                        self::$error = '文件超过浏览器允许大小';
                        return false;
                    case 3:
                        self::$error = '只有部分上传';
                        return false;
                    case 4:
                        self::$error = '用户没有选择上传文件';
                        return false;
                    case 6:
                        self::$error = '服务器找不到临时文件夹';
                        return false;
                    case 7:
                        self::$error = '文件写入失败';
                        return false;
                }
        }

        /*
         * 验证文件类型
         * @param1 string $name,需要验证的文件的名称
         * @return bool,成功返回true,失败返回false
        */
        private static function checkExtension($name){
            //获取后缀名
            $ext = strrchr($name,'.');
            $ext = substr($ext,1);

            //判断后缀是否在允许的范围内
            return in_array(strtolower($ext),self::$allow);
        }
    }

upload.html  文件

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Upload File</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="upload.php">
        <input type="file" name="file" />
        <input type="submit" value="提交">
    </form>
</body>
</html>

使用文件上传类

upload.php  文件

require_once './Upload.class.php';
$res = Upload::uploads($_FILES);//接收的是图片的名字,用于保存到数据库中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值