php 多文件上传的处理方法

php教程 多文件上传的处理方法

关于多文件上传我们讲过很多了,下面是一个简单的普通form多文件上传类了,需要的朋友可以下载试用一下。
<?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 (!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.'/'.$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() {}
       }
?>

于大量文件或大体积文件的情况可以考虑调用组件解决(如前文提到的swfupload组件)。然而有些情况只需要传递几个文件,而且文件体积并不太大,这种情况下使用组件则有点牛刀杀鸡的感觉,通过html自带的<input type="file">表单就可以实现需要的功能,关键在于后台接收程序的处理。

    php处理上传做的很方便,上传文件的信息通过服务器自动处理到$_files数组中,开发者只需要使用的内置处理函数简单操作就可以啦。asp教程开发者则没有这么幸运,官方并没有提供直接的处理方法,需要开发者自己设计,这时就需要开发者了解iis对enctype="multipart/form-data"表单的处理方式,iis把enctype="multipart/form-data"表单提交的数据存储成二进制数据,以二进制格式返回给开发者,开发者则需要通过lenb、midb的字节处理函数来分析获取的上传内容,客户端发送的具体表单数据格式,可以了解下http rfc1867协议传输格式方面的知识。

时间: 2024-09-16 01:19:36

php 多文件上传的处理方法的相关文章

fckeditor在jsp文件上传失败解决方法

fckeditor在jsp教程文件上传失败解决方法 我的代码如下 web.xml <servlet> <servlet-name>connector</servlet-name> <servlet-class>net.fckeditor.connector.connectorservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet&g

php中关于普通表单多文件上传的处理方法

然而有些情况只需要传递几个文件,而且文件体积并不太大,这种情况下使用组件则有点牛刀杀鸡的感觉,通过html自带的<input type="file">表单就可以实现需要的功能,关键在于后台接收程序的处理. php处理上传做的很方便,上传文件的信息通过服务器自动处理到$_FILES数组中,开发者只需要使用的内置处理函数简单操作就可以啦.ASP开发者则没有这么幸运,官方并没有提供直接的处理方法,需要开发者自己设计,这时就需要开发者了解IIS对enctype="mult

php中关于普通表单多文件上传的处理方法_php技巧

然而有些情况只需要传递几个文件,而且文件体积并不太大,这种情况下使用组件则有点牛刀杀鸡的感觉,通过html自带的<input type="file">表单就可以实现需要的功能,关键在于后台接收程序的处理. php处理上传做的很方便,上传文件的信息通过服务器自动处理到$_FILES数组中,开发者只需要使用的内置处理函数简单操作就可以啦.ASP开发者则没有这么幸运,官方并没有提供直接的处理方法,需要开发者自己设计,这时就需要开发者了解IIS对enctype="mult

PHP对文件上传的处理方法

$_FILES参数详解: $_FILES["file"]["name"] – 被上传文件的名称 $_FILES["file"]["type"] – 被上传文件的类型 $_FILES["file"]["size"] – 被上传文件的大小,以字节计 $_FILES["file"]["tmp_name"] – 存储在服务器的文件的临时副本的名称 $_FI

php文件上传简单实现方法_php技巧

本文实例讲述了php文件上传的简单实现方法.分享给大家供大家参考.具体如下: 文件1:index.php 复制代码 代码如下: <form enctype="multipart/form-data" action="uploadProcess.php" method="post" name="myform"> 用户名:<input type="text" name="userna

fckeditor文件上传路径修改方法

VS打开FCK项目,打开文件"FCKeditor.Net_2.6.3FileBrowserFileWorkerBase.cs" 找到这行 C# code // Map the virtual path to the local server path. string sServerDir = this.ServerMapFolder( resourceType, currentFolder, isQuickUpload ); //如果不关心按类型存放文件的话,FCK把类型分为image

Asp中文件上传,fso方法大全

  方法:BuildPath 语法:对象名.BulidPath(路径,文件名) 说明:在路径上添加文件名,如果有需要的话,会自动加上分隔符. 方法:CopyFile 语法:对象名.CopyFile(源路径,目标路径[,是否覆盖]) 说明:将一个或多个文件从源位置复制到目标位置.源位置支持通配符,如果目标路径最后字符为则认为目标路径是目录, 是否覆盖参数默认值为TURE,如果目标位置文件已经存在,而是否覆盖属性设置为FALSE的话会出错.(关于是否覆盖参数的说明其它各处皆同) 方法:CopyFol

asp.net网站中大文件上传的处理方法

问题描述 现在在做一个网站,想要把视频,图片,ppt等文件资源上传到文件夹中,怎么处理啊,用Fileupload用大小限制,用第三方组件不兼容windows7系统,还有iis配置的问题,然后想把大的文件切割成小的一块一块的在上传,这个方法行的通吗,怎么实现 解决方案 解决方案二:SWFUpload应该可以的,采用的是Flash上传,浏览器一般都是支持的利用Flash上传大文件:swfupload修改以及详细说明http://www.cnblogs.com/rexying/archive/2009

python实现ftp文件上传到服务器方法

 代码如下 复制代码 #!/usr/bin/env python2 # coding: utf-8 import os,socket,threading,time #import traceback allow_delete = False local_ip = socket.gethostbyname(socket.gethostname()) local_port = 8888 currdir=os.path.abspath('.') class FTPserverThread(thread