PHP 文件上传和下载

597 阅读1分钟

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(服务器端的文件路径);