php处理多文件上传,php 多文件上传的处理方法

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

关于多文件上传我们讲过很多了,下面是一个简单的普通form多文件上传类了,需要的朋友可以下载试用一下。

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自带的表单就可以实现需要的功能,关键在于后台接收程序的处理。

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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值