📅  最后修改于: 2023-12-03 15:23:14.976000             🧑  作者: Mango
在 Web 开发中,下载文件是一个常见的需求。PHP 提供了下载文件的功能,并且非常便于使用。本文将介绍在 PHP 中下载文件的方法。
当用户点击下载链接时,浏览器会发送一个 GET 请求来下载文件。我们需要在 PHP 脚本中处理这个请求。
以下是一个 GET 请求的例子,请求下载名为 example.pdf
的 PDF 文件:
GET /download.php?file=example.pdf HTTP/1.1
Host: example.com
在 PHP 脚本中,我们需要读取文件并将其发送到客户端。以下是一个下载文件的 PHP 代码片段:
$file = $_GET['file']; // 获取文件名
// 发送文件头
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
// 读取文件内容并发送
readfile($file);
exit;
代码解释:
header()
函数发送一些 HTTP header,通知浏览器这是个下载文件的请求。其中 Content-Disposition
指定文件名, Content-Type
指定 MIME 类型。readfile()
函数将整个文件内容发送给客户端。为了防止用户下载不应该访问的文件,我们可以在 PHP 脚本中添加一些安全性检查。
以下代码片段演示了如何检查文件名称中的特殊字符,并将文件路径限制在指定目录内:
$basename = basename($file);
if (strpos($basename, '..') !== false || preg_match('/[^A-Za-z0-9_.-]/', $basename)) {
header('HTTP/1.1 403 Forbidden');
exit;
}
$filepath = '/path/to/files/' . $basename;
if (!file_exists($filepath)) {
header('HTTP/1.1 404 Not Found');
exit;
}
在 PHP 中下载文件非常简单。我们只需要读取文件并将其发送到客户端即可。为了安全起见,可以添加一些安全性检查来防止用户下载不应该访问的文件。