文件上传和下载

功能分析

1、实现文件上传功能,为上传后的文件自动生成文件名
2、判断上传是否成功,可以在一个表单中上传多个文件
3、实现文件下载功能,将PHP的输出结果作为下载的文件内容

功能实现

1、创建文件上传表单

<form method="post" enctype="multipart/form-data">
     //隐藏域MAX_FILE_SIZE用于指定允许上传的最大字节数
	<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
	<input type="file" name="upload" />
	<input type="submit" value="上传文件" />
</form>

表单的提交方式是post,并设置enctype属性值为"multipart/form-data"
这是专门为表单提交数据设计的之中高效的编码格式
隐藏域MAX_FILE_SIZE用于指定允许上传的最大字节数,并且必须放在文件输入框的前面

2、PHP处理上传文件
PHP会将用户的上传文件的信息保存到$_FILES超全局变量中,通过var_dump()可以打印输出该数组
在这里插入图片描述
$_FILES的一维数组键名是文件上传输入框name属性名,二维数组中保存了该上传文件的具体信息
$_FILES[‘upload’][‘name’] :上传文件的名称
$_FILES[‘upload’][‘type’] :上传文件的MIME类型
$_FILES[‘upload’][‘tmp_name’]:保存在服务器中的临时文件路径
$_FILES[‘upload’][‘error’]:文件上传的错误代码,0表示成功
$_FILES[‘upload’][‘size’]:上传文件的大小,单位是字节

文件上传成功之后会暂时保存在服务器的临时目录中,为了让文件保存在指定目录中,需要使用move_uploaded_file() 函数将上传文件从目录中移动到新的位置。
移动文件时要先判断给定文件是否是通过HTTP POST上传的合法文件,防止将服务器中的其他文件当成用户上传,可通过is_uploaded_file() 判断
文件移动时如果遇到了同名文件,会自动进行替换

date_default_timezone_set("Asia/Shanghai");
  if(isset($_FILES['upload'])){
  	  if($_FILES['upload']['error']!==UPLOAD_ERR_OK){
  	  	exit('上传失败!');
  	  }
	  $save='D:/warmpserver/wamp/www/MyCode/jsTest/upload/'.date('Y_m_d_G_i_s').'.datas';
	  if(!move_uploaded_file($_FILES['upload']['tmp_name'], $save)){
	  	exit('上传失败,无法将文件保存到指定位置。');
	  }
	  $a_href=<<<eof
上传成功,文件保存路径:<a href="$save">$save</a>
eof;
	  echo $a_href;
  }

注:时间默认时伦敦时间,所用使用data函数时要设置时区
不保存原文件名是为了防止客户端提交非法的文件名造成程序出错,也能防止客户端提交php文件,造成恶意脚本执行
3、文件下载
实现文件下载,主要是在http响应头中进行设置,告知浏览器不要直接解析该文件而是将文件以下载的方式打开

$file = "D:/123.rar";
//保存待下载文件的实际保存路径
$size = filesize($file);
//获取文件大小
//设置HTTP响应消息为文件下载
header('Content-type:  application/zip');
header('Content-length:' . $size);
header('Content-Disposition: attachment; filename=' . basename($file));
//输出到浏览器,小文件
readfile($file);
/*/
/读取文件并输出,大文件
$limit = 1024;
//指定每次读取的字节数
$count = 0;
//记录已经读取的字节数
$handle = fopen($file, 'r');
while (!feof($handle) && ($size - $count > 0)) {
	echo fread($handle, $imit);
	$count += $size;
}
fclose($handle);*/

注:我测试时可以下载文件,但是每次下载的文件都被破坏,无法正常打开,如果有那位大佬知道问题在哪,希望可以指出,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值