-
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:EasyPHP\tmpphp47.tmp
- [1] => D:EasyPHP\tmpphp48.tmp
- [2] => D:EasyPHP\tmpphp49.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('上传目录创建失败!');
- } //开源代码phpfensi.com
- }
- public function getupload() {
- return emptyempty($this->up_ret) ? false : $this->up_ret;
- }
- function __destruct() {}
- }
- ?>
在上面我们会看到一个for ($i = 0; $i < $up_cnt; $i ++),这个是遍历我们上面讲的一个个实例了.
出处:http://www.phpfensi.com/php/20140828/4908.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式