PHP多文件上传类--upload.class.php

PHP多文件一件上传类–upload.class.php

最近在学习PHP,写了一个多文件上传类练练手,与单文件相比,主要注意以下几点:

  • 在表单中,的multiple属性要用到,这样可以选择多个文件
  • 获取文件名称时,要用$_FILES[]循环读取上传,具体实现方式见代码
  • *貌似可以通过js的var files = doucument.getElementById(‘files’).files,然后通过循环得到上传各文件的名称,传递给PHP后台进行操作,但具体实现方式我还不懂。。希望各路大神尝试一下,给予解答!
  • 文件类型我默认选的是图片,大小默认是3m,大家可以自己根据需求改一改,或者再写一个set()方法,直接进行设置。
  • 注释不少,应该很容易看明白

代码块

网页html代码:

<html>

<head>
    <title>文件上传测试</title>
    <script type="text/javascript" src="uploadFile.js"></script>
</head>

<body>

    <!-- <form action="upload.php" method="post" enctype="multipart/form-data"> -->
    <form action="upload.class.php" method="post" enctype="multipart/form-data">
        <label for="file">Filename:</label>
        <input type="file" name="fileNames[]" id="files" multiple="multiple" />

        <br />
        <input type="submit" name="" value="Submit" />
    </form>
</body>

</html>

后台的PHP代码:

<?php
/**
 * 支持多文件上传
 * 面向对象
 * jaywong20170910
 */
date_default_timezone_set('Asia/Shanghai');
class uploadFile{

    //成员属性
    protected $fileNames;
    protected $supportType;
    protected $maxSize;
    protected $filepath;
    protected $fileInfo;
    protected $error = null;
    protected $upFileName;

    //成员属性初始化
    public function __construct($fileNames='fileNames',
    $supportType = ['image/jpg','image/png','image/gif','image/jpeg','image/tiff'],
    $maxSize = 3000000,$filepath = '/users/jaywong/sites/uploadTest'){
        $this->fileNames = $fileNames;
        $this->supportType = $supportType;
        $this->maxSize = $maxSize;
        $this->filepath = $filepath;
        $this->fileInfo = $_FILES[$this->fileNames];
    }

    //判断错误
    protected function judgeError($i){
        if($this->fileInfo['error'][$i]){
            switch ($fileInfo['error'][$i]){
                case 1:
                $this->error = 'UPLOAD_ERR_INI_SIZE:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                return false;
                case 2:
                $this->error = 'UPLOAD_ERR_FORM_SIZE:上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。';
                return false;
                case 3:
                $this->error = 'UPLOAD_ERR_PARTIAL';
                return false;
                case 4:
                $this->error = 'UPLOAD_ERR_NO_FILE';
                return false;
                case 6:
                $this->error = 'UPLOAD_ERR_NO_TMP_DIR';
                return false;
                case 7:
                $this->error = 'UPLOAD_ERR_CANT_WRITE';
                return false;
            }
        }
    }

    //判断文件mime类型
    protected function judgeMime($i){
        if(!in_array($this->fileInfo['type'][$i],$this->supportType)){
            $this->error = $this->fileInfo['name'][$i].'不支持文件类型.<br>';
            return false;
        }
    }

    //判断文件是否超过允许最大值
    protected function judgeSize($i){
        if($this->fileInfo['size'][$i]>$this->maxSize){
            $this->error = $fileName.'文件太大了,超过了3m.<br>';
            return false;
        }
    }

    //创建目录
    protected function createDir(){
        if(!file_exists($this->filepath)){
            mkdir($this->filepath);
        }
    }

    //给上传文件命名
    protected function newName($i){
        $basename = $this->fileInfo['name'][$i];
        $filename = pathinfo($basename,PATHINFO_FILENAME);
        $extention = pathinfo($basename,PATHINFO_EXTENSION);

        $this->upFileName = $filename.date("Y-m-d H:i:s").'.'.$extention;            
    }

    //上传文件
    protected function upFile($i){

        $this->newName($i);

        if(is_uploaded_file($this->fileInfo['tmp_name'][$i])){
            move_uploaded_file($this->fileInfo['tmp_name'][$i],$this->filepath.'/'.$this->upFileName);

            echo $this->upFileName."上传成功.<br>";

            return array('name'=>$this->fileInfo['name'][$i],
                'type'=>$this->fileInfo['type'][$i],'size'=>$this->fileInfo['size'][$i],
                'newname'=>$this->newName($i));
        }
    }

    //循环上传文件
    public function loopUpFiles(){

        // $fileInfo = $_FILES[$fileNames];
        $n = count($this->fileInfo['name']);//$_FILES must be usedfor reading files information.

        for($i = 0; $i < $n; $i++){
            //判断是否有错误
            $this->judgeError($i);

            //判断文件mime类型
            $this->judgeMime($i);

            //判断文件大小
            $this->judgeSize($i);

            //创建目录
            $this->createDir();

            //上传文件
            if(is_null($this->error)){
                $this->upFile($i);
            }
        }
    }

    //查看错误接口
    public function getError(){
        return $this->error;
    }

    //清空对象
    function __destruct(){

    }
}

$upFiles = new uploadFile();
$upFiles->loopUpFiles();

?>
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容中的代码片段,你的问题是关于在C:\phpStudy\PHPTutorial\WWW\upload-labs\Pass-01\index.php文件的第53行,出现了"Undefined index: action"的错误。 这个错误通常是由于在代码中使用了未定义的变量或者数组中不存在的键引起的。在这个情况下,错误提示指出"action"索引在数组中未定义。 为了解决这个问题,你需要确保在使用"action"变量之前,这个变量已经被定义或者赋值。你可以检查一下代码中是否缺少了对"action"变量的定义或者赋值。 另外,你还可以使用isset()函数来检查一个变量是否已经定义,以避免出现这种错误。你可以在使用"action"变量之前,使用isset()函数来检查一下这个变量是否已经定义。例如:if(isset($_GET['action'])) { // 这里是你的代码 } 这样可以确保在使用"action"变量之前,先检查一下这个变量是否存在。 请注意,以上只是一种可能的解决方案,具体的解决方法可能因你的代码结构和逻辑而有所不同。你需要仔细检查你的代码,并根据具体情况进行调试和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [CTF Web方向考点总结](https://blog.csdn.net/qq_41513009/article/details/126934814)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值