记得当初刚刚学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。
*/

相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!