php_文件上传与下载

一.文件上传

在这里插入图片描述

01_action.php — 代码

	var_dump($_POST);
	var_dump($_FILES); //一定要记得加上'_' !!

	//只要脚本没有执行结束,临时目录中的文件则不会被删除
	//如果要从临时目录中拽出文件就用rename

	rename($_FILES['pic']['tmp_name'], './www.jpg');
	//把$_FILES中pic里面的tmp_name移动到当前目录下的www.jpg
	//tmp_name是临时文件

file.html — 代码

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">   <!-- <meta charset="utf-8">一定要写,不然就会乱码!    -->
	<title>up</title>
</head>
<body>

	 <form action="01_action.php" method="POST" enctype="multipart/form-data">
	  <!-- 上传文件一定要写enctype="multipart/form-data-->
	<title>up</title>
	
	 	<input type="text" name="user" id="">
	 	<input type="file" name="pic" id="">
	 	<input type="hidden" name="MAX_FILE_SIZE" value="30000" />  
	 	<!-- MAX_FILE_SIZE上传文件最大值 -->
	 	<input type="submit" value="提交">
	 </form>

</body>
</html>

在这里插入图片描述

	//和php配置文件的相关的选项:
	//upload_max_filesize
	//允许上传文件大小的最大值
	//file_uploads=On 
	// 允许文件上传
	//upload_tmp_dir   文件上传的临时目录
	//max_file_uploads
	//允许最大上传文件个数
	//post_max_size
	//post最大传输内容

在这里插入图片描述

file.html — 代码

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">   <!-- <meta charset="utf-8">一定要写,不然就会乱码!    -->
	<title>up</title>
</head>
<body>

	 <form action="02_do_upload.php.php" method="POST" enctype="multipart/form-data">
	  <!-- 上传文件一定要写enctype="multipart/form-data-->
	<title>up</title>
	 	<input type="text" name="user" id="">
	 	<input type="hidden" name="MAX_FILE_SIZE" value="30000" />  
	 	<!-- MAX_FILE_SIZE上传文件最大值 -->
	 	<input type="file" name="pic" id="">
	 	<input type="submit" value="提交">
	 </form>

</body>
</html>

02_do_upload.php — 代码

 	header('Content-type:text/html;charset=utf-8');
    //接收用户上传的文件
 	 var_dump($_FILES['pic']);
 	 var_dump($_POST);
    //   1.判断是否上传成功,判断错误号,是否从客户端上传到系统临时目录过程中成功
 	 $error = $_FILES['pic']['error'];   //把$_FILES['pic']['error']赋值给变量$error
 	 if($error > 0){
 	 	      //上传文件有问题报告问题
 	 	switch($error){ 
	    // case 0: echo '上传成功'; break; 
	    case 1: echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值'; break; 
	    case 2: echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值'; break; 
	    case 3: echo '文件只有部分被上传'; break; 
	    case 4: echo '没有文件被上传'; break; 
	    case 6: echo '找不到临时文件夹'; break; 
	    case 7: echo '文件写入失败'; break; 
		} 
 	 }
	//	 2.判断上传文件的类型是否符合要求
 	 //2.1定义允许上传的类型
	$type = array('image/png','image/jpg','image/jpeg','image/gif');
	$pictype = $_FILES['pic']['type'];
	if(!in_array($pictype, $type)){

		die('上传的文件类型不符合要求..');
	}
	//	 3.判断上传文件的大小是否符合要求
 	 //3.1定义允许上传文件的大小
 	 	$filesize = 200000;

	$size = $_FILES['pic']['size'];   // 把$_FILES['pic']['size']赋值给变量$size
	//3.2判断上传的文件大小是否超过了允许的大小
	if($size > $filesize){

		die('文件太大了,请换一张..');
	}
	//	 4.创建上传成功后保存的目录
	//4.1定义一个保存的目录
	  $path = './upload';
	 //4.2判断目录是否存在.不存在就创建
	   if(!file_exists($path)){
	   	 mkdir($path);
	   }
	//	 5.上传上来的图片  不能重名  重新命名
	  //5.1获取文件上传的后缀
	 $suffix = strrchr($_FILES['pic']['name'],".");     //suffix  后缀
	  		//strrchr查找.最后出现的位置并返回从该位置到字符串结尾的所有字符;
	echo $suffix;
 	
 	do{
 		//5.2拼接文件新名称
 		$name = time().mt_rand(1,1000).uniqid().$suffix;
 	}while(file_exists($path.'/'.$name));
 	echo $name."<br/>";
 	// echo uniqid();
 	

	 //  strrchr():函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符;
		// 注意:是最后一次出现的位置。

	//	 6.移动文件(从垃圾目录中移动到指定的目录中并且图片要求重命名) 
	if(move_uploaded_file($_FILES['pic']['tmp_name'],$path.'/'.$name)){
		echo '上传文件成功';
	} else {
		echo '上传失败';
	}

在这里插入图片描述

制作文件上传函数

php代码

	header('Content-type:text/html;charset=utf-8');
	//   1.判断是否上传成功,判断错误号,是否从客户端上传到系统临时目录过程中成功
	//	 2.判断上传文件的类型是否符合要求
	//3.判断上传文件的大小是否符合要求
	//	 4.创建上传成功后保存的目录
	//5.上传上来的图片  不能重名  重新命名
	//	 6.移动文件(从垃圾目录中移动到指定的目录中并且图片要求重命名)
	//制作文件上传函数
   /* 
	@param1 表单名称
	@param2 可选参数 上传成功保存的路径
	@param3 可选参数  上传文件大小
	@param4 可选参数 长传文件的类型


   */
  	$result = upload('pic','./wanghui');
  	var_dump($result);
  	function upload($pic,$path = './wanghui',$size = 20000,$type = array('image/png','image/jpg','image/jpeg','image/gif')) {
  		//接收上传文件的数组
  		$file = $_FILES[$pic];
  		//   1.判断是否上传成功,判断错误号,是否从客户端上传到系统临时目录过程中成功
  		if($file['error'] > 0){
 	 	      //上传文件有问题报告问题
 	 			switch($file['error']){ 
	    // case 0: echo '上传成功'; break; 
					    case 1: 
					   	 		return '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值'; 
					   	 		 
					    case 2:
					    		return '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
					    	     
					    case 3:
					    		return '文件只有部分被上传'; 
					    		 
					    case 4:
					   		    return '没有文件被上传'; 
					   		    
					    case 6:
					   			return '找不到临时文件夹'; 
					   			
					    case 7:
					    		return '文件写入失败'; 
	    		
		} 
 	 }
  	
  	//	 2.判断上传文件的类型是否符合要求
  	if(!in_array($file['type'], $type)){

  		return ('上传的文件类型不符合要求..');
  	}
  	//3.判断上传文件的大小是否符合要求
  		if($file['size'] > $size){

		return ('文件太大了,请换一张..');
	}
	//	 4.创建上传成功后保存的目录
		  if(!file_exists($path)){
	   	 mkdir($path);
	   }
	     //处理路径中最后的斜线问题
	   $path = rtrim($path,'/\\');   //rtrim是去除一个字符串尾部空格,这里是去除'/'和'\'因为linux中路径是'\'
	   	//5.上传上来的图片  不能重名  重新命名
   		$suffix = strrchr($file['name'],'.');
   		do {
   			$newName = time().mt_rand(1,1000).uniqid().$suffix;
 	
   		}while(file_exists($path.'/'.$newName));
   		// 6.移动文件(从垃圾目录中移动到指定的目录中并且图片要求重命名)
   		//定义一个返回数组
   		 $info = array();
   		 if(move_uploaded_file($file['tmp_name'],$path.'/'.$newName)){
   		 	//返回一个数组   数组中包含 图片名称    图片路径   图片路径_名称
   		 		$info['name'] = $newName;
   		 		$info['path'] = $path;
   		 		$info['pathName'] = $path.'/'.$newName;
   		 		return $info;
   			 }else{
   		 		return '未知错误';
   			 }

   	}

文件下载

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

文件下载 — html代码

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>download</title>
</head>
<body>
	<a href="./05_download.php">迅雷下载</a>
	<a href="wireshark-win32_cn.zip">软件下载</a>

</body>
</html>

文件下载 — php代码

//声明要下载文件的类型
// header('Content-type: application/pdf');
//设置编码为了让IE浏览器兼容

// //将字符串安装指定的编码进行转换
// $newStr = iconv('utf-8','gbk',$str);
//对下载文件进行描述并且制定下载文件的名称   GBK包含全部中文字符
//iconv('输入的字符集','输出的字符集','要转换的字符串') ------>    字符串按要求的字符编码来转换 
header('Content-Disposition: attachment; filename="huihui.jpg"');
//读取需要下载的文件
readfile('./upload/15999226501315f5ce1da4cd8b.jpg');


header('location:./file.html');//点击跳转到本地某一指定需要跳转的路径页面 ---  一点击就跳转
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件可以使用 HTML 的 `<form>` 标签和 `<input>` 标签来实现。需要将 `<form>` 标签的 `enctype` 属性设置为 `multipart/form-data`,这样浏览器就会将表单中的文件数据进行特殊的编码,然后再将编码后的数据发送给服务器。在服务器端,可以使用 PHP 提供的 $_FILES 数组来获取上文件信息。 以下是一个简单的上文件的 HTML 表单: ``` <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="上文件" name="submit"> </form> ``` 其中,`action` 属性指定了表单提交的 URL,`method` 属性指定了表单提交的方法(此处为 POST),`enctype` 属性指定了表单数据的编码方式。`<input>` 标签的 `type` 属性为 `file`,表示这是一个文件的输入框,`name` 属性为 `fileToUpload`,表示上文件的参数名。 在服务器端,可以使用以下 PHP 代码来处理上文件: ``` <?php if(isset($_POST["submit"])) { $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // 检查文件是否已存在 if (file_exists($target_file)) { echo "对不起,该文件已存在。"; $uploadOk = 0; } // 检查文件大小 if ($_FILES["fileToUpload"]["size"] > 500000) { echo "对不起,文件过大。"; $uploadOk = 0; } // 允许特定的文件格式 if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "对不起,只允许上 JPG, JPEG, PNG 和 GIF 文件。"; $uploadOk = 0; } // 检查 $uploadOk 是否为 0 if ($uploadOk == 0) { echo "对不起,文件失败。"; // 如果一切都没问题,尝试上文件 } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "文件 ". basename( $_FILES["fileToUpload"]["name"]). " 上成功。"; } else { echo "对不起,文件失败。"; } } } ?> ``` 代码中首先检查了上文件的大小、格式等信息,如果有问题则提示用户上失败。如果一切都没问题,则将上文件移动到指定的目录中。 文件下载可以使用 PHP 的 `readfile()` 函数来实现。以下是一个简单的下载文件的 PHP 代码: ``` <?php $file = "example.txt"; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($file).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file); exit; } else { echo "对不起,文件不存在。"; } ?> ``` 代码中首先检查了要下载文件是否存在,如果存在则设置了 HTTP 响应头,告诉浏览器该文件需要以附件形式下载。最后调用了 `readfile()` 函数将文件内容输出到客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值