下面是采用header定义为文件然后readfile下载并隐藏下载地址的完整攻略。
什么是header定义为文件然后readfile下载?
这种方式通过HTTP头的方式告诉浏览器,需要下载指定的文件,并且直接输出该文件内容,而不是通过浏览器打开。同时,设置正确的MIME类型,使得浏览器正确地处理该文件类型。这种方式可以隐藏文件的下载地址,并且可以对文件进行权限控制等操作。
采用header定义为文件然后readfile下载的步骤
- 首先,需要将PHP的文件流暂停,并清除输出缓冲区,以确保输出的HTTP头能够被正确识别。
<?php
ob_end_clean(); //清除输出缓存区
header("Content-type: application/octet-stream"); //设置MIME类型为二进制文件流
header("Content-Disposition: attachment; filename=文件名"); //设置下载的文件名
readfile("下载的目标文件路径"); //读取并输出文件内容
exit();
?>
- 设置MIME类型
将下载文件设置为二进制类型的文件流传输,以达到正确下载的目的,设置Content-type为application/octet-stream
。
header("Content-type: application/octet-stream");
- 设置Content-Disposition
设置Content-Disposition为attachment
并指定下载的文件名,以触发下载并命名该文件。
header("Content-Disposition: attachment; filename=文件名");
- 输出文件内容
使用readfile函数读取下载文件,将其输出,完成文件下载。
readfile("下载的目标文件路径");
示例说明
示例一
以下示例将实现一个简单的文件下载,用户点击下载链接,即可下载指定文件(隐藏了该文件的下载地址)。
<p>请下载<a href="download.php">文件</a>。</p>
download.php文件:
<?php
ob_end_clean();
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=test.txt");
readfile("test.txt");
exit();
?>
该示例会下载当前目录下的test.txt文件。
示例二
以下示例将实现一个权限控制的文件下载,只有登录了的用户才能下载指定文件。
<p>请下载<a href="download.php">同级别文件</a>或<a href="download_admin.php">管理员级别文件</a>。</p>
download.php文件:
<?php
session_start();
if(!isset($_SESSION['login']) || !$_SESSION['login']) {
header('HTTP/1.1 401 Unauthorized');
exit(); //非法用户,返回错误状态码并退出
}
ob_end_clean();
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=same_level.txt");
readfile("same_level.txt");
exit();
?>
download_admin.php文件:
<?php
session_start();
if(!isset($_SESSION['login']) || !$_SESSION['login'] || $_SESSION['level'] != 'admin') {
header('HTTP/1.1 401 Unauthorized');
exit(); //非法用户,返回错误状态码并退出
}
ob_end_clean();
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=admin_level.txt");
readfile("admin_level.txt");
exit();
?>
该示例会检查用户是否登录以及用户权限,只有登录且权限正确的用户才能下载对应的文件。
本文链接:https://my.lmcjl.com/post/14991.html
展开阅读全文
4 评论