PHP使用header方式实现文件下载功能

当用户需要下载服务器上存储的文件时,可以使用 PHP 的 header() 函数实现文件下载功能。以下是实现文件下载的完整攻略:

步骤一:创建下载链接

在 HTML 页面中创建一个下载链接,该链接指向一个 PHP 下载文件的脚本,如下所示:

<a href="download.php?filename=example.docx">Download example.docx</a>

此处假设要下载的文件为 example.docx。

步骤二:编写下载脚本

在服务器上创建一个 PHP 文件(如 download.php),该文件接收文件名参数,并使用 header() 函数实现下载功能,如下所示:

<?php
$filename = $_GET['filename'];
if (file_exists($filename)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($filename).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    readfile($filename);
    exit;
} else {
    exit('File not found');
}
?>

该脚本读取文件名参数,检查该文件是否存在。如果文件存在,则设置必要的 header 响应头,包括:

  • Content-Type:文件类型。使用 application/octet-stream 表示文件是二进制流(Binary Stream)。
  • Content-Disposition:文件的属性。attachment 表示以附件(Attachment)形式下载文件。filename 表示文件名,使用 basename() 函数获取文件名。
  • Content-Length:文件的大小。使用 filesize() 函数获取文件大小(单位:字节)。
  • Content-Transfer-Encoding:文件传输编码。使用 binary 表示二进制编码传输。
  • Expires, Cache-Control, Pragma:禁止浏览器缓存。

最后使用 readfile() 函数将文件读取出来并输出到浏览器,然后结束脚本运行。

示例一:下载文本文件

以下是一个示例,我们下载一个文本文件 test.txt。

HTML 代码:

<a href="download.php?filename=test.txt">Download test.txt</a>

download.php 代码:

<?php
$filename = $_GET['filename'];
if (file_exists($filename)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($filename).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    readfile($filename);
    exit;
} else {
    exit('File not found');
}
?>

示例二:下载图片文件

以下是另一个示例,我们下载一张图片文件 test.jpg。

HTML 代码:

<a href="download.php?filename=test.jpg">Download test.jpg</a>

download.php 代码:

<?php
$filename = $_GET['filename'];
if (file_exists($filename)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($filename).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    readfile($filename);
    exit;
} else {
    exit('File not found');
}
?>

通过以上步骤,我们就可以通过 PHP 的 header() 函数实现文件下载功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP使用header方式实现文件下载功能 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • php 信息采集程序代码

    以下是关于如何编写 PHP 信息采集程序的完整攻略。 准备工作 在编写 PHP 信息采集程序之前,需要安装 PHP(版本 5.6+ )、Apache 和 MySQL。具体如何安装这些软件,可以参考官方文档或者其他优秀的教程。 步骤一:设置所需参数 在进行信息采集之前,我们需要设置所需参数。可以通过 create_function() 函数创建一个匿名函数来实…

    PHP 2023年5月23日
    00
  • 基于PHP中的常用函数回顾

    基于 PHP 中的常用函数回顾 在 PHP 中,常用函数是编写和处理 Web 应用程序的关键。这些函数可以大大简化我们的开发过程,并让我们的代码变得更加简洁和易于理解。在本攻略中,我们将回顾 PHP 中的一些常用函数。 字符串处理函数 strlen($str) strlen() 函数用于获取字符串的长度,返回字符串的字节数。 例如,检查字符串“Hello W…

    PHP 2023年5月26日
    00
  • php配置php-fpm启动参数及配置详解

    PHP配置php-fpm启动参数及配置详解 php-fpm是什么? PHP-FPM(FastCGI Process Manager for PHP)是 PHP 官方针对 FastCGI 协议的 PHP 处理程序管理器,是基于 FastCGI 的进程管理器,可以独立于 Web 服务器(如 nginx、apache)运行。PHP-FPM 可以更好的管理 PHP …

    PHP 2023年5月24日
    00
  • PHP中读取文件的几个方法总结(推荐)

    来给你详细讲解一下PHP中读取文件的几个方法总结。 1. file_get_contents()方法 基本用法 file_get_contents()方法是PHP内置的一个函数,用于读取文件内容,并返回一个字符串。 $file_path = ‘test.txt’; $content = file_get_contents($file_path); echo …

    PHP 2023年5月26日
    00
  • PHP 错误处理机制

    PHP中错误处理机制主要是通过error_reporting和set_error_handler两个函数实现的。以下是处理PHP错误的完整攻略: 错误级别 PHP错误分为不同级别,每个级别对应一个数字。在PHP中提供了 error_reporting 函数来设置需要报告哪些错误级别的错误信息。 以下是常见的错误级别: E_ERROR: 致命错误,脚本无法运行…

    PHP 2023年5月26日
    00
  • PHP 采集程序 常用函数

    关于”PHP采集程序常用函数”的攻略,可以从以下几个方面展开讲解: 一、采集目标网址 在采集程序中,首先要确定好需要采集的目标网址。可以通过cURL库或file_get_contents函数获取页面数据。其中,cURL库需要先执行curl_init()函数进行初始化,再设置相关的参数,最后通过curl_exec()函数执行获取页面数据的操作,例如: $url…

    PHP 2023年5月23日
    00
  • 微信小程序纯CSS实现无限弹幕滚动效果

    下面从头开始讲解微信小程序纯CSS实现无限弹幕滚动效果的攻略。 1. 明确需要实现的效果 为了实现无限弹幕滚动效果,我们需要让弹幕以一定的速度不断地从右侧进入屏幕,并且不停地向左滚动,当弹幕滚出左侧屏幕后,又会从右侧进入屏幕,形成一个无限循环。 2. 设置弹幕外层容器 我们可以先设置一个外层容器 .barrage-container,用来包含所有的弹幕,如下…

    PHP 2023年5月23日
    00
  • php实例分享之二维数组排序

    接下来我将为您详细讲解“php实例分享之二维数组排序”的完整攻略。 一、什么是二维数组排序? 在php中,我们经常需要对数组进行排序,而如果数组是一个多维数组时,我们就需要对其进行二维数组排序。简单来说,二维数组排序就是对一个数组中的子数组进行排序,使得整个数组具有一定的顺序。 二、二维数组排序的方法详解 php中有三种主要的排序方法来对二维数组进行排序,分…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部