PHP之文件系统处理_文件上传处理


  bool  is_uploaded_file(string name); //用于判断指定的文件是否通过HTTPPOST上传的。filename必须类似于$_FILES[‘filename'][‘temp_name']的变量,不可以使用从客户端上传的文件名$_FILES[‘filename'][‘name']。 

   move_upload_file(string filename,stringdestination);//该函数用于将文件上传到服务器中指定的位置。如果成功,则返回true,否则返回false。filename指定上传文件的临时文件名,即$_FILES['tmp_name'],参数destination指定文件上传后保存的新路径和名称。如果参数不是合法的上传文件,不会出现任何操作,该函数将返回false。如果是合法的上传操作,但是由于某些原因无法移动,则不会出现任何操作,返回false的同时将会发出一条警告。 

php中应用move_uploaded_file()函数实现文件上传。但在执行之前, 为了防止潜在的攻击对原本不能通过脚本交互的文件进行非法管理,可以先应用is_uploaded_file()函数判断指定的文件是否通过HTTPPOST上传的 ,如果是则返回true。通过该函数,可以确保恶意的用户无法欺骗脚本去访问不能访问的文件。

函数名                         作用
  is_uploaded_file()             判断是否是POST上传文件
  move_uploaded_file()           移动post上传的文件
  count()                       计算数组中的单元数目或对象中的属性个数
  date()                         格式化一个本地时间/日期
  in_array()                     检查数组中是否存在某个值
  explode()                     使用一个字符串分割另一个字符串
 

例题:单文件上传
 
定义文件上传处理页面upfile.php
//单个文件上传练习
<?php 
if( !empty($_FILES[ 'up_picture' ][ 'name' ])){ 
	if( $_FILES['up_picture']['error'] > 0){ 
		echo "上传错误!"; 
		switch($_FILES['up_picture']['error']){ 
			case 1: 
			echo "上传文件超出配置文件规定值"; 
			break; 
			case 2: 
			echo "上传文件超出表单规定值"; 
			break; 
			case 3: 
			echo "上传文件不全"; 
			break; 
			case 4: 
			echo "没有上传文件"; 
			break; 
		} 
	}else{ 
		if( ! is_dir('./upfile/') ) mkdir('./upfile/'); 
		$path='./upfile/'.time().$_FILES['up_picture' ][ 'name' ]; //定义上传文件路径和名称,也可以自定义名称
		if( is_uploaded_filed( $_FILES['up_picture' ][ 'tmp_name' ] )){ 
			if(!move_uploaded_file( $_FILES['up_picture' ][ 'tmp_name' ] ,$path )){ 
				echo "上传失败!"; 
			}else{ 
				echo "文件".time().$_FILES['up_picture' ][ 'name' ] ."上传成功,大小为:".$_FILES['up_picture' ][ 'size' ] ; 
			} 
		}else{ 
			echo "上传文件".$_FILES['up_picture' ][ 'name' ]."不合法"; 
		} 
	} 
} 

//其他限制可自由添加
$allowtype=array("jpg","gif","png"); //定义可以被上传的文件类型
$upfilenameandtype=explode(".",$_FILES["pic"]["name"]);
$type=count($upfilenameandtype);
$upfiletype=strtolower($upfilenameandtype[$type-1]);

if(!in_array($upfiletype,$allowtype)){
	 echo "您选择的文件类型不正确,请选择jpg、gif、png的文件类型";
	 exit;
}
$filesize=1000000;  //定义上传文件的大小
if($_FILES["pic"]["size"] > $filesize){
	 echo "你上传的文件超过了限制,只能上传不超过".$filesize."Byte的文件";
	 exit;
}
$uploaddir=$_POST["uploaddir"];  //接受上传的文件目录地址
$newname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100,999).".".$upfiletype; //将 新上传的文件进行重命名
?> 

 
//文件上传界面upload.html:
<html>
 <head>
	 <title> 文件上传练习 </title>
 </head>
 <body>
	  <center>文件上传练习</center>
		  <form action="upload.php" method="post" enctype="multipart/form-data">
		  <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
		  请设置上传文件目录<input type="text" name="uploaddir" value="./upload/"><br  />
		  请选择上传文件:<input type="file" name="pic" />
		  <input type="submit" name="sub" value="提交" />
	  </form>
 </body>
</html>


 
例题:多文件上传
 
定义文件上传处理页面upfile.php
<?php
//文件上传练习
$i=0;
foreach($_FILES["pic"]["error"] as $error){
	 $i++;
	 if($error!=0){   //判断是否上传出错,如果出错退出程序
	 switch($error){
	  case 1:
	   echo "第".$i."个文件超过PHP.INI限制".'<br />';
	   break;
	  case 2:
	   echo "第".$i."个文件超过HTML表单限制".'<br />';
	   break;
	  case 3:
	   echo "第".$i."个文件只有部分被上传".'<br />';
	   break;
	  case 4:
	   echo "第".$i."个文件没有被上传".'<br />';
	   break;
	  default:
	   echo "未知错误!".'<br />';
	 }
	  exit;
}
}
$j=0;
$allowtype=array("jpg","gif","png");
foreach($_FILES["pic"]["name"] as $type){
	 $j++;
	 $upfilenameandfile=explode(".",$type);
	 $upfiletype=$upfilenameandfile[count($upfilenameandfile)-1];
	 $upfiletype=strtolower($upfiletype);
	 if(!in_array($upfiletype,$allowtype)){
	  echo  "第".$j."个文件不是是被上传的文件类型";
	  exit;
	 }
}
$allowsize=1000000;
$h=0;
foreach($_FILES["pic"]["size"] as $size){
	 $h++;
	 if($size>$allowsize){
	  echo "你上传的第".$h."个文件超过大小限制";
	  exit;
	 }
}
$upfiledir=$_POST["uploaddir"];
if(!file_exists($upfiledir)){
	 mkdir($upfiledir);
}
$k=0;
foreach($_FILES["pic"]["tmp_name"] as $name){
	 $k++;
	 $newname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100,999).".".$upfiletype;
	 if(!is_uploaded_file($name)){
	  echo "非法上传!<br />";
	  exit;
 }else{
	  move_uploaded_file($name,$upfiledir.$newname);
	  echo "恭喜你,第".$k."个文件上传成功!<br />";
 }
}
?>

//文件上传界面upload.html:
<html>
 <head>
	<title> 多文件上传练习 </title>
 </head>
 <body>
  <center>多文件上传练习</center>
  <form action="upload.php" method="post" enctype="multipart/form-data">
	  <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
	  请设置上传文件目录<input type="text" name="uploaddir" value="./upload/"><br  />
	  请选择上传文件:<input type="file" name="pic[]" /><br />
	  请选择上传文件:<input type="file" name="pic[]" /><br />
	  请选择上传文件:<input type="file" name="pic[]" /><br />
	  请选择上传文件:<input type="file" name="pic[]" /><br />
	 <input type="submit" name="sub" value="提交" />
  </form>
 </body>
</html>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值