php返回下载文件 (你怎样使用PHP来返回下载文件?)
当我们开发一个网站或者应用时,经常会需要用户下载一些文件。而PHP就提供了返回下载文件的功能。下面,我们将介绍如何使用PHP来实现这个功能。
首先,我们需要知道返回下载文件的原理。在HTTP协议中,服务器的响应会带有一个Content-Disposition头,其中的filename参数就是指定文件名,浏览器就会自动下载保存该文件。
那么如何在PHP中设置Content-Disposition头呢?代码如下:
php
$file = 'example.txt'; // 文件名
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;
上述代码说明:
- 第一行指定要下载的文件名。
- 接下来几行设置Content-Disposition头及其他相关头。
- 最后一行使用readfile函数将文件输出,以便浏览器下载保存。
另外,如果要返回动态生成的文件,可以使用PHP的输出缓存obstart和obend_clean函数:
php
ob_start(); // 打开输出缓冲
// 动态生成文件
$content = 'Hello, world!';
$file = 'example.txt';
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: ' . strlen($content));
echo $content; // 不需要readfile函数,直接输出内容
ob_end_clean(); // 关闭输出缓冲并清空输出内容
exit;
上述代码说明:
- 第一行打开输出缓冲。
- 接下来动态生成文件内容。
- 最后将内容直接输出,不需要使用readfile函数。
- 使用obendclean函数关闭输出缓冲并清空输出内容,以便浏览器下载保存。
总之,PHP提供了简单、便捷的方法来返回下载文件,只需要设置Content-Disposition头及其他相关头,并输出文件内容即可。