记得当初刚刚学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
//判断文件类型是否符合
$type = explode(".",$name[$i]);
$type = end($type);
$type = strtolower($type);
if(!in_array($type,$types)){
echo "第".($i+1)."个文件类型不符合
";
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."
";
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。
*/