记得当初刚刚学php的时候,遇到封装单文件和多文件上传函数,对于我来说,封装函数可能丈二和尚摸不着头脑。不过经过大量脑细胞的灭亡还是写出来了。下面我就分享一下当初写的幼稚的代码,现在上班都是面向对象编程,再也体会不到当初的乐趣了。代码如下:
单文件上传函数:
function upload_file($thumb,$pubtime){ $file = $thumb; $pubtime1=date("Y-m-d",$pubtime); $pubtime2=explode("-",$pubtime1); $dir = "./uploads/$pubtime2[0]/$pubtime2[1]/$pubtime2[2]"; if(!is_dir($dir)){ mkdir($dir,0777,TRUE); } //判断上传的文件是否符合类型 end 函数5.3版本以上用在一起的话 会报错 $type = explode(".",$file['name']); $type = end($type); $type = strtolower($type); $types = array("jpg","jpeg","bmp","gif","png"); if(!in_array($type,$types)) exit("上传的文件类型不符合"); //判断文件错误类型 switch($file['error']){ case 1: $err = "超出系统规定文件的大小"; break; case 2: $err = "超出隐藏域规定文件的大小"; break; case 3: $err = "文件部分被上传"; break; case 4: $err = "没有文件上传"; break; case 6: $err = "未找到临时文件夹"; break; case 7: $err = "写入临时文件夹错误"; break; } if($file['err']!=0) exit($err); //判断临时文件是否存在 if(!is_uploaded_file($file['tmp_name'])) exit("临时文件不存在"); //将文件上传到服务器 $newname = time()."_".rand(1,1000).".".$type; $path1 = $dir."/".$newname; return $path1; } // 函数封装完毕----------------------------------------------------
单文件上传函数前台的调用:
$pubtime=strtotime(trim($_POST['pubtime'])); // 时间戳 $pimgs=$_FILES['pimgs']; // 图片库 $file = $thumb; if($file['name'] !== ""){ $thumb = upload_file($thumb,$pubtime); // 调用单文件上传函数 //echo $thumb;exit; if(move_uploaded_file($file['tmp_name'],$thumb)){ echo "标题图片上传成功 "; }else{ msg("标题图片上传失败","./product_add.php"); } }else{ $thumb = ""; // 判断是否有图片地址 没有则为空 }
多文件上传函数:
function upload_movefile($pimgs,$pubtime){ $movefile = $pimgs; //二维数组 $name = $movefile['name']; //一维数组 $tmp_name = $movefile['tmp_name']; $error = $movefile['error']; //判断要上传的文件夹是否存在 $pubtime1=date("Y-m-d",$pubtime); $pubtime2=explode("-",$pubtime1); $dir = "./uploads/$pubtime2[0]/$pubtime2[1]/$pubtime2[2]"; if(!is_dir($dir)) mkdir($dir); $types = array("jpg","jpeg","bmp","gif","png"); $path = array(); for($i=0;$i<count($name);$i++){
//判断文件类型是否符合
$type = explode(".",$name[$i]);
$type = end($type);
$type = strtolower($type);
if(!in_array($type,$types)){
echo "第".($i+1)."个文件类型不符合<br/>";
continue;
} //判断错误类型 switch($error[$i]){ case 1: $err = "超出系统规定文件的大小"; break; case 2: $err = "超出隐藏域规定文件的大小"; break; case 3: $err = "文件部分被上传"; break; case 4: $err = "没有文件上传"; break; case 6: $err = "未找到临时文件夹"; break; case 7: $err = "写入临时文件夹错误"; break; } if($error[$i]!=0){ echo "第".($i+1)."个文件错误为".$err."<br/>"; continue; } //判断临时文件是否存在 if(!is_uploaded_file($tmp_name[$i])){ echo "第".($i+1)."个文件的临时文件不存在"; continue; } //上传到服务器 $path[] = $path_a = $dir."/".time()."_".rand(1,1000).".".$type; // 将得到的值 赋值给一个数组 最后在进行用 ; 连接 if(move_uploaded_file($tmp_name[$i],$path_a)){ echo "第".($i+1)."个文件上传成功"; }else{ echo "第".($i+1)."个文件上传失败"; } } $path = $path?implode(";",$path):""; // 不用静态变量 return $path; } //---------------------封装多文件上传函数完毕----------------------
多文件上传函数前台的调用:
$pubtime=strtotime(trim($_POST['pubtime'])); // 时间戳 $pimgs=$_FILES['pimgs']; // 图片库 $pimgsname = $pimgs['name']; $str1 = @implode("",$pimgsname); if($str1 != ""){ $pimgs = upload_movefile($pimgs,$pubtime); // 调用多文件上传函数 //print_r($pimgs);exit; if(!isset($pimgs)){ msg("图片库上传失败","./product_add.php");exit; } }else{ echo $pimgs=""; // 判断是否有图片地址 没有则为空 }
注意事项:
// 封装一个单文件上传的函数 Only variables should be passed by reference 报错 5.3版本以上 变量不能用函数的返回值 所以路径不好封装函数 /* 这个问题多半是因为引用传递参数引起的, 解决办法一是修改代码不使用引用传递;另一个办法是修改php配置文件,修改error_reporting 其值改为error_reporting = E_ALL & ~E_NOTICE。 */
友情提示:垃圾评论一律封号...