PHP实现文件下载两种方式(a标签和header标签)

PHP实现文件上传


文件的下载

1.标签a直接下载

<a href="/uploads/123465.docx" download="">download</a>

2.采用Header方式下载

<?php
ob_end_clean();
$file_name = "3.pdf";     //下载文件名
$file_dir = "./uploads/";        //下载文件存放目录
$file=$file_dir.$file_name;
//检查文件是否存在于目录
if (!file_exists ($file)) {
    header('HTTP/1.1 404 NOT FOUND');
} else {
    ob_end_clean();
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    //请求范围的度量单位
    Header ( "Accept-Ranges: bytes" );
    //下载后的文件名称为$file_name
    header('Content-Disposition: attachment; filename='.$file_name);
    header('Content-Transfer-Encoding: binary');
    #Expires:设置页面缓存时间
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: no cache');
    //Content-Length是指定包含于请求或响应中数据的字节长度
    header('Content-Length: ' . filesize($file));
    ob_clean(); flush();
    readfile($file);
    exit();ob_end_clean();
}

1. 下载文件对话框

<?php
// 输出 PDF 文件
header('Content-type: application/octet-stream');

// 供一个推荐的文件名名称为 $file_name文件
header('Content-Disposition: attachment; filename='.$file_name);

// 该 PDF 来源于$file_name
readfile($file_name);
?>

2. 缓存指令

PHP 脚本经常生成一些动态内容,它不该被客户端、服务器与浏览器之间的代理缓存,通过以下指令控制缓存。

   <?php
       //设置缓存时间
   header('Expires: 0');
   header('Cache-Control: must-revalidate');
   ?>

cache-control可取值:

  • no-cache: 告诉浏览器、缓存服务器,不管本地副本是否过期,使用资源副本前,一定要到源服务器进行副本有效性校验。

  • must-revalidate:告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。

3. 清除缓存

如果不清楚缓存,在读取含图片的文件时,容易出现乱码等问题

  • ob_end_clean();
  • ob_clean(); flush();

web性能优化之:no-cache与must-revalidate深入探究

header官方文档

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miracle Fan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值