ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php实现文件下载的几种方式

2020-11-29 15:29:08  阅读:137  来源: 互联网

标签:文件 文件名 代码 几种 如下 php 链接 下载


  本文简单介绍在PHP中几种常用文件下载方式。

    一、直接链接文件下载

    在知道文件路径的情况下,可以简单的通过页面“a”标签元素,直接下载文件。 代码如下:   

<!DOCTYPE html>
<html lang="en">
<head>
    <base target="_self">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache,must-ridate">
    <meta http-equiv="expires" content="0">
</head>
<body>
<a href="down.rar">下载文件</a>
</body>
</html>

    二、根据参数动态查找并跳转到下载链接   

    通常情况下,文件名是变动的,需要根据指定条件计算出文件名。此时可以在后台根据变量参数,动态计算查找到文件并跳转到下载链接。前端代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <base target="_self">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache,must-ridate">
    <meta http-equiv="expires" content="0">
</head>
<body>
<a href="index.php?filename=down">下载文件</a>
</body>
</html>

    后台代码如下:    

<?php

$down = $_GET['filename'];   // 获取文件参数
$filename = $down . '.rar'; // 构造文件名称
$dir = "/";  // 相对于网站根目录的下载目录路径
$down_host = $_SERVER['HTTP_HOST']; // 当前域名

// 如果文件存在,则跳转到下载路径
if (file_exists(__DIR__ . '/' . $dir . $filename)) {
    header('location:http://' . $down_host . $dir . $filename);
} else {
    header('HTTP/1.1 404 Not Found');
}

    文件存在时,点击“下载文件”即可正常下载文件。否则会提示404文件不存在,如下图

    1-20110411544H96.png

    三、使用fread()函数把文件直接输出到浏览器

    除了通过文件名下载,我们也可以在后台通过fread方法,读出文件内容,然后将文件内容以流的方式直接输出到浏览器。代码如下:

<?php

$file_name = "down.rar";     // 下载文件名
$file_dir = "./";        // 下载文件存放目录
// 检查文件是否存在
if (!file_exists($file_dir . $file_name)) {
    header('HTTP/1.1 404 NOT FOUND');
} else {
    // 以只读和二进制模式打开文件
    $file = fopen($file_dir . $file_name, "rb");

    // 告诉浏览器这是一个文件流格式的文件
    Header("Content-type: application/octet-stream");
    // 请求范围的度量单位
    Header("Accept-Ranges: bytes");
    // Content-Length是指定包含于请求或响应中数据的字节长度
    Header("Accept-Length: " . filesize($file_dir . $file_name));
    // 用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
    Header("Content-Disposition: attachment; filename=" . $file_name);

    // 读取文件内容并直接输出到浏览器
    echo fread($file, filesize($file_dir . $file_name));
    fclose($file);

    exit ();
}

    总结:

    第一个和第二个操作比较简单,但是容易暴露文件的真实地址,安全性不高。第三种能够较好的把文件的真实地址隐藏起来。

标签:文件,文件名,代码,几种,如下,php,链接,下载
来源: https://blog.csdn.net/ztnhnr/article/details/110313672

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有