0
点赞
收藏
分享

微信扫一扫

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

犹大之窗 2022-03-12 阅读 96

PHP实现文件上传


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

文件的下载

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官方文档

举报

相关推荐

0 条评论