首页 > php上传下载 > PHP多文件上传理解总结

PHP多文件上传理解总结

上传文件HTML的输入标签FILE类型中的名称后要加[],作用是在HTML中向PHP建立数组,比如名称为pictures,多文件引用名称则为pictures[],实例代码如下:

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    <p> 
    <input type="file" name="pictures[]" /><br /> 
    <input type="file" name="pictures[]" /><br /> 
    <input type="file" name="pictures[]" /><br /> 
    <input type="submit" value="上传" /> 
    </p> 
</form>

手册中实例,选择文件后点击上传,代码如下:

<?php
print_r($_FILES); ?>
查看源文件,代码如下:
Array 
( 
    [pictures] => Array 
    ( 
    [name] => Array 
    ( 
    [0] => file1.txt 
    [1] => file2.txt 
    [2] => file3.txt 
    ) 
    [type] => Array 
    ( 
    [0] => application/octet-stream 
    [1] => application/octet-stream 
    [2] => application/octet-stream 
    ) 
    [tmp_name] => Array 
    ( 
    [0] => D:EasyPHPtmpphp47.tmp 
    [1] => D:EasyPHPtmpphp48.tmp 
    [2] => D:EasyPHPtmpphp49.tmp 
    ) 
    [error] => Array 
    ( 
    [0] => 0 
    [1] => 0 
    [2] => 0 
    ) 
    [size] => Array 
    ( 
    [0] => 94289 
    [1] => 65536 
    [2] => 102400 
    ) 
    ) 
)

假设名为 /file1.txt和 /file2.txt 的文件被提交,则 $_FILES['pictures']['name'][0] 的值将是 file1.txt,而 $_FILES['pictures']['name'][1] 的值将是 file2.txt。类似的,$_FILES['file2.txt']['size'][0] 将包含文件 file1.txt 的大小,有了上面信息了我们要实现多文件上传就简单了,代码如下:

<?php
class upload {
    public $up_ext = array() , $up_max = 5210, $up_dir;
    private $up_name, $up_rename = true, $up_num = 0, $up_files = array() , $up_ret = array();
    function __construct($name, $ext = array() , $rename = true) {
        if (!emptyempty($name)) {
            $this->up_name = $name;
            !emptyempty($ext) && $this->up_ext = $ext;
            $this->up_rename = $rename;
            $this->up_dir = website_dirroot . $globals['cfg_upload_path'];
            $this->initupload();
        } else {
            exit('upload文件域名称为空,初始化失败!');
        }
    }
    private function initupload() {
        if (is_array($_files[$this->up_name])) {
            $up_arr = count($_files[$this->up_name]);
            $up_all = count($_files[$this->up_name], 1);
            $up_cnt = ($up_all - $up_arr) / $up_arr;
            for ($i = 0; $i < $up_cnt; $i++) {
                if ($_files[$this->up_name]['error'][$i] != 4) {
                    $this->up_files[] = array(
                        'tmp_name' => $_files[$this->up_name]['tmp_name'][$i],
                        'name' => $_files[$this->up_name]['name'][$i],
                        'type' => $_files[$this->up_name]['type'][$i],
                        'size' => $_files[$this->up_name]['size'][$i],
                        'error' => $_files[$this->up_name]['error'][$i]
                    );
                }
            }
            $this->up_num = count($this->up_files);
        } else {
            if (isset($_files[$this->up_name])) {
                $this->up_files = array(
                    'tmp_name' => $_files[$this->up_name]['tmp_name'],
                    'name' => $_files[$this->up_name]['name'],
                    'type' => $_files[$this->up_name]['type'],
                    'size' => $_files[$this->up_name]['size'],
                    'error' => $_files[$this->up_name]['error']
                );
                $this->up_num = 1;
            } else {
                exit('没找找到需要upload的文件!');
            }
        }
        $this->chkupload();
    }
    private function chkupload() {
        if (emptyempty($this->up_ext)) {
            $up_mime = array(
                'image/wbmp',
                'image/bmp',
                'image/gif',
                'image/pjpeg',
                'image/x-png'
            );
            foreach ($this->up_files as $up_file) {
                $up_allw = false;
                foreach ($up_mime as $mime) {
                    if ($up_file['type'] == $mime) {
                        $up_allw = true;
                        break;
                    }
                }
                !$up_allw && exit('不允许上传' . $up_file['type'] . '格式的文件!');
                if ($up_file['size'] / 1024 > $this->up_max) {
                    exit('不允许上传大于 ' . $this->up_max . 'k 的文件!');
                }
            }
        } else {
            foreach ($this->up_files as $up_file) {
                $up_ext = end(explode('.', $up_file['name']));
                $up_allw = false;
                foreach ($this->up_ext as $ext) {
                    if ($up_ext == $ext) {
                        $up_allw = true;
                        break;
                    }
                }
                !$up_allw && exit('不允许上传.' . $up_ext . '格式的文件!');
                if ($up_file['size'] / 1024 > $this->up_max) {
                    exit('不允许上传大于 ' . $this->up_max . 'k 的文件!');
                }
            }
        }
        $this->uploading();
    }
    private function uploading() {
        if (io::dircreate($this->up_dir)) {
            if (chmod($this->up_dir, 0777)) {
                if (!emptyempty($this->up_files)) {
                    foreach ($this->up_files as $up_file) {
                        if (is_uploaded_file($up_file['tmp_name'])) {
                            $file_name = $up_file['name'];
                            if ($this->up_rename) {
                                $file_ext = end(explode('.', $file_name));
                                $file_rnd = substr(md5(uniqid()) , mt_rand(0, 26) , 6);
                                $file_name = date('ymdhis') . '_' . $file_rnd . '.' . $file_ext;
                            }
                            $file_name = $this->up_dir . '/' . $file_name;
                            if (move_uploaded_file($up_file['tmp_name'], $file_name)) {
                                $this->up_ret[] = str_replace(website_dirroot, '', $file_name);
                            } else {
                                exit('文件上传失败!');
                            }
                        }
                    }
                }
            } else {
                exit('未开启写入权限!');
            }
        } else {
            exit('上传目录创建失败!');
        } //开源代码phprm.com
        
    }
    public function getupload() {
        return emptyempty($this->up_ret) ? false : $this->up_ret;
    }
    function __destruct() {
    }
}
?>

在上面我们会看到一个for ($i = 0; $i < $up_cnt; $i ++),这个是遍历我们上面讲的一个个实例了.


教程链接:http://www.phprm.com/scxz/fs4908.html

随意转载~但请保留教程地址★

标签:php文件上传 php多文件上传

相关文章

发表留言