WEB_PHP_PHP文件上传下载

本文详细介绍了使用PHP进行文件上传和下载的基本步骤与代码实现,包括表单上传表单的创建、文件类型验证、大小限制、错误处理及文件保存流程;以及如何实现文件下载功能,包括设置响应头、处理文件路径和大小,以及输出文件内容。通过实例代码,清晰展示了PHP处理文件操作的核心逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:简单举例说明,PHP文件上传下载;

一、文件上传
1、上传表单 upload_form.html
<html>
<body>
	<form action="upload_file.php" method="post" enctype="multipart/form-data">
		<label for="file">Filename:</label>
		<input type="file" name="file" id="file" /> 
		<br />
		<input type="submit" name="submit" value="Submit" />
	</form>
</body>
</html>
2、上传处理 upload_file.php
<?php
	if ((($_FILES["file"]["type"] == "image/gif")
	|| ($_FILES["file"]["type"] == "image/jpeg")
	|| ($_FILES["file"]["type"] == "image/pjpeg"))
	&& ($_FILES["file"]["size"] < 20000))
	{
		if ($_FILES["file"]["error"] > 0)
		{
			echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
		}
		else
		{
			echo "Upload: " . $_FILES["file"]["name"] . "<br />";
			echo "Type: " . $_FILES["file"]["type"] . "<br />";
			echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
			echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

			if (file_exists("upload/" . $_FILES["file"]["name"]))
			{
				echo $_FILES["file"]["name"] . " already exists. ";
			}
			else
			{
				move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
				echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
			}
		}
	}
	else
	{
		echo "Invalid file";
	}
?>

二、文件下载
=> 刷新 (跳转到自身或者其他页面)
//Refresh举例 (测试时关闭ie,再重新打开,才能出效果)
header("Refresh: 5;url=http://www.baidu.com"); 

=>下载
需求: 在 下载超链接列表 中,点击下载链接,从而下载对应文件;
// -- 面向过程
// Content-Disposition举例下载文件 [没有文件下载列表对应] 测试通过(简单版本)
<?php

	/// 二、寻找文件
	// 1、文件名称
	$file_name="北京.avi";
	$file_name=iconv("utf-8","gb2312",$file_name);	// 处理中文乱码;
	// 2、文件路径
	$file_path=$_SERVER['DOCUMENT_ROOT']."/http"."/".$file_name;
	// 3、是否存在
	if(!file_exists($file_path)){
		echo " 文件不存在";
		return ;
	}
	// 4、文件大小
	$file_size=filesize($file_path);

	/// 二、设响应头
	header("Content-type: application/octet-stream");
	header("Accept-Ranges: bytes");
	header("Accept-Length: $file_size");
	header("Content-Disposition: attachment; filename=".$file_name);
	
	/// 三、文件处理 (打开、读取、输出)
	// 打开文件
	$fp=fopen($file_path,"r");
	// 读取 输出 文件
	$buffer_size=120;
	$count=0;
	while(!feof($fp)&&$file_size-$count>0){
		// 读取
		$buffer=fread($fp,$buffer_size);
		// 输出
		echo $buffer;
		$count+=$buffer_size;
	}
	// 关闭文件
	fclose($fp);
?>

// -- 面向函数: 从过程中封装成函数;
// Content-Disposition举例 下载文件[没有文件下载列表对应] 测试通过(复杂版本)
<?php
	/// download() 文件下载函数
	//file_dir:文件所在目录
	//file_name:文件名
	function download($file_dir,$file_name)
	{
		/*
		/// 路径参数处理
		// 文件路径
		$file_dir = chop($file_dir);		// 去掉路径多余空格;
		if($file_dir != "")
		{
			$file_path = $file_dir;
			if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != "/"){
				$file_path .= "/";
			}
			$file_path .= $file_name;
		}            
		else{
			$file_path = $file_name;    
		}

		//判断文件是否存在 [中文需要 iconv('UTF-8','GB2312',$fileName)处理]
		if(!file_exists($file_path))
		{
			echo "对不起,你要下载的文件不存在。";
			return false;
		}
		$file_size = filesize($file_path);
		*/
		
		/// 一、寻找文件
		// 文件名称
		$file_name="capture-23.camrec";
		// 文件路径
		$file_path="capture-23.camrec";
		// 文件大小
		$file_size = filesize($file_path);

		/// 二、设响应头
		header("Content-type: application/octet-stream");
		header("Accept-Ranges: bytes");
		header("Accept-Length: $file_size");
		header("Content-Disposition: attachment; filename=".$file_name);

		/// 三、文件处理 (读取、输出)
		// 打开文件
		$fp = fopen($file_path,"r");
		$buffer_size = 1024;
		$cur_pos = 0;
		while(!feof($fp)&&$file_size-$cur_pos>0)
		{
			// 读取
			$buffer = fread($fp,$buffer_size);
			// 输出
			echo $buffer;
			// 循环控制变量
			$cur_pos += $buffer_size;
		}
		// 关闭
		fclose($fp);
	}
	download();
?>

// -- 处理链接请求 调用函数下载
<?php
	// download() 文件下载函数
	//file_dir:文件所在目录
	//file_name:文件名
	function download($file_dir,$file_name)
	{
		/*
		/// 文件路径 处理
		$file_dir = chop($file_dir);		// 去掉路径多余空格;
		if($file_dir != "")
		{
			$file_path = $file_dir;
			if(substr($file_dir, strlen($file_dir)-1, strlen($file_dir)) != "/"){
				$file_path .= "/";
			}
			$file_path .= $file_name;
		}else{
			$file_path = $file_name;
		}
		// 判断文件 是否存在
		if(!file_exists($file_path))
		{
			echo "对不起,你要下载的文件不存在。";
			return false;
		}
		$file_size = filesize($file_path);
		*/

		/// 一、寻找文件
		$file_path=$_SERVER['DOCUMENT_ROOT'].$file_dir.$file_name;
		if(!file_exists($file_path))
		{
			echo "对不起,你要下载的文件不存在。";
			return false;
		}
		// 文件大小
		$file_size = filesize($file_path);
		// 文件名称
		$file_name=$file_name;

		/// 二、设响应头
		header("Content-type: application/octet-stream");
		header("Accept-Ranges: bytes");
		header("Accept-Length: $file_size");
		header("Content-Disposition: attachment; filename=".$file_name);

		/// 三、文件处理 (打开、读取、输出)
		// 文件打开
		$fp = fopen($file_path,"r");
		$buffer_size = 1024;
		$cur_pos = 0;
		while(!feof($fp)&&$file_size-$cur_pos>0)
		{
			// 读取
			$buffer = fread($fp,$buffer_size);
			// 输出
			echo $buffer;
			$cur_pos += $buffer_size;
		}
		// 关闭文件
		fclose($fp);
	}

	/// 接收图片名 提供文件下载
	if(isset($_REQUEST['fileName'])){
		$filename=$_REQUEST['fileName'];
		download("/http/down/",$filename);
	}else{
		echo "没有文件";
	}
	echo "<br/><a href='DownFileList.php'>返回</a>";
?>

->缓存禁用
header ("Cache-Control: no-cache");
header ("Pragma: no-cache");
header ("Expires: -1");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值