1. 文件上传
1.1. 文件上传的原理
先将客户端的文件上传到服务器端,再将服务器端的临时目录中的文件移动到目标目录
1.2. 将客户端的文件上传到服务器端
1.2.1. 普通的 HTML 表单
<form action=“PHP文件名” method=“post” enctype=“multipart/form-data”>
<input type=“file” name=“单文件浏览框名” /><br />
<input type=“file” name=“多文件浏览框名[]” multiple=“multiple” /><br />
<input type=“submit” value=“提交” />
</form>
1.2.2. 限制文件大小和文件类型的 HTML 表单
<form action=“PHP文件名” method=“post” enctype=“multipart/form-data”>
<input type=“hidden” name=“MAX_FILE_SIZE” value=“字节数” />
<input type=“file” name=“单文件浏览框名” accept=“MIME类型1, 类型2, ......” /><br />
<input type=“file” name=“多文件浏览框名[]” multiple=“multiple” accept=“MIME类型1, 类型2, ......” /><br />
<input type=“submit” value=“提交” />
</form>
1.3. 将服务器端的临时文件移动到目标目录
1.3.1. 通过文件上传变量 $_FILES 获取上传文件的信息
$_FILES[‘浏览框名’][‘name’] :客户端的文件名
$_FILES[‘浏览框名’][‘type’] :文件 MIME 类型
$_FILES[‘浏览框名’][‘tmp_name’] :服务器端的临时文件路径
$_FILES[‘浏览框名’][‘error’] :文件上传错误号
$_FILES[‘浏览框名’][‘size’] :文件大小(单位:字节)
1.3.2. 文件上传错误号
0 :没有错误,文件上传成功
1 :文件大小超过了 php.ini 中的 upload_max_filesize 选项的值
2 :文件大小超过了 HTML 表单中的 MAX_FILE_SIZE 选项的值
3 :文件只有部分被上传
4 :没有文件被上传
6 :没有找到临时目录
7 :临时文件写入失败
1.3.3. 判断服务器端的临时文件是否是通过 HTTP POST 上传的
bool is_uploaded_file(string 服务器端的临时文件路径)
1.3.4. 将服务器端的临时文件移动到目标目录并重命名
bool move_uploaded_file(string 服务器端的临时文件路径, string 服务器端的目标文件路径)
- move_uploaded_file() 会检查并确保服务器端的临时文件是通过 HTTP POST 上传的,否则不会移动文件
2. 文件下载
2.1. 浏览器不支持的类型的文件的下载
<a href=“服务器端的文件路径”>下载</a>
2.2. 浏览器支持的类型的文件的下载
2.2.1. HTML 文件
<a href=“PHP文件路径?标识符=服务器端的文件路径”>下载</a>
2.2.2. PHP 文件
服务器端的文件路径 = $_GET[‘标识符’];
header(“Content-Disposition: attachment; filename=客户端的文件名”);
header(“Content-Length: 文件大小”);
readfile(服务器端的文件路径);