原创

PHP-lib-upload.func.php-文件(图片)上传

upload.func.php

<?php
/**
* 说明:构建上传文件信息
* @return array
*/

function buildInfo(){
if(!$_FILES){
return ;
}
$i=0;
$files='';
foreach ($_FILES as $v){
//单文件
if(is_string($v['name'])){
$files[$i]=$v;
$i++;
}else{
//多文件
foreach ($v['name'] as $key=>$val){
$files[$i]['name']=$val;
$files[$i]['size']=$v['size'][$key];
$files[$i]['tmp_name']=$v['tmp_name'][$key];
$files[$i]['error']=$v['error'][$key];
$files[$i]['type']=$v['type'][$key];
$i++;
}
}
}
return $files;
}


/**
* 说明:上传文件并返回上传成功的文件信息的二维数组,含有name size type索引
* @param string $path 保存的文件夹
* @param array $allowExt 支持上传的文件类型
* @param int $maxSize 单文件最大支持的大小 xMB * 1024 * 1024
* @param bool $imgFlag 检查是不是真的图片类型
* @return array $uploadedFiles 返回上传成功的文件信息的二维数组,
* 含有name size type索引(error、tmp_name被unset())
*/

function uploadFile($path="uploads", $allowExt=array('gif','jpeg','png','jpg','wbmp'),$maxSize=2097152,$imgFlag=true){
if(!file_exists($path)){
mkdir($path,0777,true);//recursive 必需。规定是否设置递归模式。第三个参数
}
$i=0;
$mes ='';
$uploadedFiles="";
$files = buildInfo();
if(!($files && is_array($files))){//count() 可以换成 !is_array($files)(含有!) count($files)==0
return ;
}
//print_r($files);
//exit();
foreach ($files as $file){//貌似还有点问题 上传时提示$mes="没有文件被上传";//UPLOAD_ERR_NO_FILE
if($file['error']==UPLOAD_ERR_OK){
$ext = getExt($file['name']);
//检查文件的扩展名
if(!in_array($ext, $allowExt)){
exit('非法文件类型');
}
//
if($imgFlag){
//检验是不是真的图片类型
if(!getimagesize($file['tmp_name'])){
exit("不是真正的图片类型");
}
}
if($file['size']> $maxSize){
exit("上传文件过大");
}
//检验是不是通过post方式上传上来的
if(!is_uploaded_file($file['tmp_name'])){
exit('不是通过HTTP POST方式上传的');
}
$filename = getUniName().".".$ext;
$destination =$path."/".$filename;
if(move_uploaded_file($file['tmp_name'], $destination)){
$file['name']=$filename;
unset($file['error'],$file['tmp_name']);//决定遗留下来的对象
$uploadedFiles[$i] = $file;
$i++;
}
}else{
switch($file['error']){
case 1:
$mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE
break;
case 2:
$mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZE
break;
case 3:
$mes="文件部分被上传";//UPLOAD_ERR_PARTIAL
break;
case 4:
$mes="没有文件被上传";//UPLOAD_ERR_NO_FILE
break;
case 6:
$mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR
break;
case 7:
$mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;
break;
case 8:
$mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION
break;
}
//echo $mes; //没有文件被上传 应该是这里显示的 是不是应该开启线程异步? 这里显示出错的具体原因,含有未上传的情况
}
}
return $uploadedFiles;
}




正文到此结束
本文目录