实现的一个多功能上传文件程序,可以满足单文件上传或者多文件上传
<?php
/*
* upMoreFile(string $fname, string $fpath, string $ftype) 上传多文件处理
* string $fname 上传的表单里 file 名
* string $fpath 文件保存路径,保存路径请使用 '/'
* string $ftype 设定上传文件的类型
* string $ftypeAdd 增加上传文件类型, 添加多个类型请用 ',' 分开
*/
function upMoreFile( $fname, $fpath, $ftype='img', $ftypeAdd = '' )
{
/*
* 设置上传路径的数组
*/
$uppath = array();
/*
* 判断上传的文件是否是数组
*/
if(is_array($_FILES[$fname]['tmp_name'])) {
$utmp_name = $_FILES[$fname]['tmp_name'];
$uerror = $_FILES[$fname]['error'];
$uname = $_FILES[$fname]['name'];
$num = count($_FILES[$fname]['tmp_name']);
} else {
$utmp_name = array($_FILES[$fname]['tmp_name']);
$uerror = array($_FILES[$fname]['error']);
$uname = array($_FILES[$fname]['name']);
$num = 1;
}
/*
* 循环处理上传文件
*/
for ($i = 0; $i < $num; $i++) { // 循环处理
/*
* 检查是否有上传错误
*/
if(empty($utmp_name[$i])) {
continue;
}
if($uerror[$i] > 0) {
switch($uerror[$i]){
case "1":
echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
return $uppath;
case "2":
echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
return $uppath;
case "3":
echo "文件只有部分被上传";
return $uppath;
case "4":
echo "没有文件被上传";
return $uppath;
case "6":
echo "找不到临时文件夹。";
return false;
case "7":
echo "文件写入失败";
return $uppath;
}
}
/*
* 判断是否是通过 HTTP POST 方法传输
*/
if( is_uploaded_file( $utmp_name[$i] ) )
{
/*
* 获取上传文件类型
*/
$name = basename( $uname[$i] );
$type = explode( '.', $name );
$uptype = strtolower( $type[count( $type )-1] );
/*
* $ftype 设定上传文件的类型,根据 $ftype 选择默认的正确文件类型
*/
switch ($ftype) {
case 'img':
$typearr = array( 'jpg', 'png', 'gif', 'bmp', 'jpeg' );
break;
case 'tar':
$typearr = array( 'zip', 'rar', 'gz', 'tar' );
break;
case 'off':
$typearr = array('doc', 'xls', 'ppt');
break;
case 'txt':
$typearr = array('txt');
break;
}
/*
* string $ftypeAdd 增加上传文件类型, 将添加的类型加到已有数组里
*/
if( $ftypeAdd != '') {
$typeAdd = explode(',', $ftypeAdd);
$typearr = array_merge($typeAdd, $typearr);
}
/*
* 验证获取的类型是否存在于默认的类型,以及添加的类型中
*/
if( !in_array( $uptype, $typearr ) )
{
echo "<script>alert('输入的类型不正确')</script>";
return $uppath;
}
/*
* 设置保存路径及文件名
*/
if(!is_dir($fpath)) {
//生成指定的目录
$array_dir=explode("/",$fpath);//把多级目录分别放到数组中
$path = '';
foreach($array_dir as $value){
$path .= $value."/";
if(!file_exists($path)){
mkdir($path, 0777);
}
}
}
$upfile = time();
$rand = rand(1, 1000);
$upfilename = $fpath.$upfile.'_'.$rand.".".$uptype;
/*
* 复制文件到指定路径下
*/
if( move_uploaded_file( $utmp_name[$i], $upfilename ) )
{
$uppath[] = $upfilename;
}
else
{
echo "<script>alert('上传失败')</script>";
return $uppath;
}
} else {
return $uppath;
}
} // 循环处理结束
return $uppath;
}
?>