文件上传于下载
文件上传
1 文件上传通过HTTP前端自动完成的,我们不用管细节的实现
2 上传的文件默认存在在一个临时目录里
3 我们要做的就是把临时目录里的文件移动到我们需要的目录里
<?php
header('Content-Type:text/html;charset=utf8');
//判断$_POST中是否有submit
if (isset($_POST['submit'])) {
//判断临时文件是不是HTTP post上传的
if (is_uploaded_file($_FILES['file']['tmp_name'])) {
$arr = pathinfo($_FILES['file']['name']);//获取到文件路径信息 需要用到它的文件拓展名
$newName = mt_rand(1000,9999);//生成一个新的不重复的名称
//移动文件
if (move_uploaded_file($_FILES['file']['tmp_name'],'upload/'.$newName.'.'.$arr['extension'])) {
echo '文件上传成功';
} else {
echo '文件上传失败';
}
} else {
echo '不是通过HTTP post上传的';
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<!--multipart/form-data 是指表单数据有多bai部分构du成:既有文zhi本数据,又有文件等二进制数据的意思。-->
<!--<input type="hidden" name="MAX_FILE_SIZE" value="102400">-->
<!--因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。 -->
<input type="file" name="file">
<input type="submit" name="submit" value="开始上传">
</form>
</body>
</html>
六 文件下载
文件下载的原理:浏览器遇到自己不能解析的格式文件时,会下载下来。
PHP代码下载就是把自己伪装成浏览器不能识别的文件类型。
前置知识:MIME 是描述消息内容类型的因特网标准。
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
//文件下载 利用的就是浏览器遇到自己解析不了的文件就会下载下来
//把PHP文件模拟其成它浏览器识别不了的文件
$file = 'upload/1062.pdf';
//准备工作:使用fileinfo扩展模块的一系列函数 获取到文件的MIME类型
$fileInfo = finfo_open(FILEINFO_MIME_TYPE);//1 创建一个 fileinfo 资源
$mimeType = finfo_file($fileInfo,$file);//2 返回一个文件信息
finfo_close($fileInfo);//3 关闭fileinfo资源
//1 发送 指定的文件MIME类型 的头信息
header('Content-type:'.$mimeType);
//2 指定下载文件的描述
header('Content-Disposition:attachement;filename='.basename($file));
//3 指定文件的大小
header('Content-Length:'.filesize($file));
//4 读取文件内容至输出缓冲区,返回这个文件
readfile($file);