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

    PHP多文件上传理解总结_PHP教程

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











    //手册中实例。

    选择文件后点击上传

    代码如下 复制代码

    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 的大小,

    有了上面信息了我们要实现多文件上传就简单了

    代码如下 复制代码

    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 (!empty($name)) {
    $this->up_name = $name;
    !empty($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 (empty($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 (!empty($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.'//m.sbmmt.com/m/'.$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('上传目录创建失败!');
    }
    }

    public function getupload() {
    return empty($this->up_ret) ? false : $this->up_ret;
    }

    function __destruct() {}
    }
    ?>

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


    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/444622.htmlTechArticle上传文件HTML的输入标签FILE类型中的名称后要加[],作用是在HTML中向PHP建立数组,比如名称为pictures,多文件引用名称则为pictures[],实例如下...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 文件 上传 理解 总结 上传 文件 HTML 输入 标签 FILE 类型 中的 名称 作用
    上一篇:php内存缓存实现程序代码_PHP教程 下一篇:PHP无限分类实例程序_PHP教程
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• 细思极恐?关于in_array的第3个参数• PHP无限分类的类_php技巧• 超强分页类2.0发布,支持自定义风格,默认4种显示模式_php实例• PHP递归创建多级目录_PHP• php中memcache 基本操作实例_PHP
    1/1

    PHP中文网