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在Web开发领域的优势

    PHP是一种开源的服务器端脚本语言,它可以运行于各种操作系统(Windows、 Linux等)以及支持各种Web服务器(Apache、Nginx等)。PHP是广泛应用于Web开发领域的一种语言,有着以下几个优势: 优势一:易学易用 学习PHP较为容易,因为它的语法设计简单,与C语言类似。而且,在处理Web编程时,PHP语言能够简单地集成HTML和CSS,从而…

    PHP 2023年5月26日
    00
  • PHP实现生成推广海报的方法详解

    PHP实现生成推广海报的方法详解 生成推广海报是网络推广中常见的一种方式,可以帮助推广者更好地展示产品和服务。在本篇文章中,我们将详细讲解如何使用PHP实现生成推广海报的方法。 1. 准备工作 在开始之前,我们需要安装一个强大的PHP库——GD库。GD(Gif Draw)库是一个开源的绘图库,用于创建动态和静态图片。要使用GD库,您需要在PHP配置中启用该模…

    PHP 2023年5月23日
    00
  • PHP中的self关键字详解

    PHP中的self关键字详解 self是一个在PHP中表示当前类的关键字。当我们在类的内部使用self时,它将指代当前类。self通常用于在类的方法和属性中进行访问和操作。本文将详细讲解self关键字的用法及示例。 self关键字的用法 访问类的常量 类常量是指在类中定义的、不可更改的常量。我们可以在类中通过const关键字来定义常量,常量的访问方式是在常量…

    PHP 2023年5月26日
    00
  • PHP获取文件属性的最简单方法

    获取文件属性是PHP开发中比较常用的操作之一,比如获取文件大小、创建时间、修改时间、文件类型等,下面介绍一下PHP获取文件属性的最简单方法。 使用PHP内置函数获取文件属性 PHP提供了许多函数用于获取文件属性,可以根据需求选择不同的函数,其中比较常用的有以下几个。 1.文件大小 可以使用PHP内置函数filesize()获取文件大小,示例如下: $file…

    PHP 2023年5月26日
    00
  • php基于curl主动推送最新内容给百度收录的方法

    下面是关于“php基于curl主动推送最新内容给百度收录的方法”的完整攻略。 1. 什么是主动推送 主动推送是指网站管理员或开发者主动通知搜索引擎有新的网站内容需要被收录的一种方式。主动推送能够加快网站内容被搜索引擎收录的速度,提高网站的曝光率和流量。 2. 主动推送的方式 目前常用主动推送方式有两种:Ping方式和提交站点地图方式。这里不做过多介绍。 除此…

    PHP 2023年5月26日
    00
  • PHP对象转换为数组函数(递归方法)

    下面我会给出详细讲解“PHP对象转换为数组函数(递归方法)”的完整攻略,包含如下内容: 题目背景 函数原型与参数说明 函数实现思路 示例解释 注意事项 题目背景 在 PHP 开发中,有时候需要将一个对象转换成数组,以便于对其进行处理。因此,我们需要编写一个函数来实现将 PHP 对象转换成 PHP 数组的功能。 函数原型与参数说明 函数名:object_to_…

    PHP 2023年5月26日
    00
  • php中print(),print_r(),echo()的区别详解

    PHP中print(), print_r(), echo()的区别详解 在 PHP 中,有三个常用的输出函数,分别是 print()、print_r() 和 echo(),它们的输出结果有所不同,本文将详细解释它们的区别及适用范围。 print() print() 函数在 PHP 中用来返回一个字符串,并将其输出到浏览器端。它的语法如下: print $st…

    PHP 2023年5月26日
    00
  • PHP编程网上资源导航

    下面是关于“PHP编程网上资源导航”的完整攻略。 什么是“PHP编程网上资源导航” “PHP编程网上资源导航”是一个专门为PHP程序员提供各种PHP编程相关网站和资源的网站导航。 如何使用“PHP编程网上资源导航” 使用“PHP编程网上资源导航”非常简单,只需按照以下步骤进行: 打开“PHP编程网上资源导航”网站。 在导航网站页面的顶部菜单中选择您需要的分类…

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