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 生成短网址的方法。 1. 思路分析 生成短网址的核心思路如下: 获取原始网址。 将原始网址转换成一个唯一的字符串。可以使用一些哈希函数或者随机字符串生成函数。 将短网址和原始网址建立一一对应的映射关系。 将原始网址的短网址返回给用户。 实现过程中需要考虑到以下问题: 如何保证短网址…

    PHP 2023年5月23日
    00
  • PHP实现的装箱算法示例

    下面是“PHP实现的装箱算法示例”的完整攻略。 什么是装箱算法? 装箱算法也称为“三维装箱问题”,它是一种在给定的一组物品中选择最少数量的物品并将它们放入指定数量和容量的盒子中的问题。通常用于优化物品的存储和运输。装箱算法的总体目标是找到最优的箱子布局,并尽量减少使用的箱子数量,以最小化成本和空间。 如何使用PHP来实现装箱算法 下面是一些实现装箱算法所需的…

    PHP 2023年5月26日
    00
  • PHP array_key_exists检查键名或索引是否存在于数组中的实现方法

    PHP array_key_exists检查键名或索引是否存在于数组中的实现方法 array_key_exists 是 PHP 内建的函数,用于判断指定的键名或索引是否存在于数组中。 该函数的语法如下: bool array_key_exists(mixed $key, array $array) 该函数接收两个参数,第一个参数是需要检查的键名或索引,第二个…

    PHP 2023年5月26日
    00
  • Lua编程示例(八):生产者-消费者问题

    Lua编程示例(八):生产者-消费者问题 一、生产者-消费者问题概述 生产者-消费者问题是指一个或多个生产者生成某种数据,一个或多个消费者消耗这些数据,而生成和消费的过程在同一时间却并不总是同步的。在多线程或并发编程中,这个问题常常出现。 这个问题可以用队列来模拟,当队列长度为0时,消费者等待数据的到达;当队列长度达到容量上限时,生产者等待队列中的数据被消费…

    PHP 2023年5月27日
    00
  • 浅谈php中include文件变量作用域

    当在 PHP 中使用 include 或 require 加载外部文件时,该外部文件中的变量会覆盖当前脚本中同名的变量。这会导致一些思维上的混乱和不可预测性,因此需要了解和处理变量作用域问题。 PHP 变量作用域 PHP 中有三种变量作用域:局部、全局和超级全局。 局部变量只能在函数内部使用。 全局变量可以在函数内外使用。 超级全局变量可以在脚本的任何地方使…

    PHP 2023年5月23日
    00
  • PHP使用http_build_query()构造URL字符串的方法

    介绍:http_build_query()函数是一个将数组变量转换为 URL-encode 之后的字符串的 PHP 内置函数。当我们需要将数组数据拼接在 URL 之后进行传递时,使用该函数可以将数组快速转换成 URL 字符串。 使用方法: http_build_query($query_params, null, ‘&’); 参数: $query_p…

    PHP 2023年5月26日
    00
  • php读取文件内容的几种方法详解

    PHP读取文件内容的几种方法详解 在PHP中,读取文件内容是一项比较常用的操作。本文将介绍PHP读取文件内容的几种方法,包含了常用的几种方法以及一些较为高级的读取方法。 1. 使用file_get_contents()函数读取文件内容 file_get_contents()函数可用于读取文件,并且自动将文件内容读取到字符串中。 示例代码: $file_con…

    PHP 2023年5月23日
    00
  • PHP图片加水印实现方法

    下面是“PHP图片加水印实现方法”的详细攻略。 1. 准备工作 在进行加水印操作前,需要确保安装了 PHP 的 GD 库。如果没有安装,可以通过以下命令进行安装: sudo apt-get install php7.2-gd 同时需要准备一张水印图片,该图片可以是 PNG、JPG 或 GIF 格式。我们可以先随便找张图片用于测试。 2. 实现步骤 2.1 打…

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