但是,这样做,就没办法做一些统计,权限检查,等等的工作。于是,很多时候,我们采用让PHP来做转发,为用户提供文件下载。

$file = “/tmp/dummy.tar.gz”;

header(“Content-type: application/octet-stream”);

header('Content-Disposition: attachment; filename=“' . basename($file) . '”');

header(“Content-Length: “. filesize($file));

readfile($file);

但是这个有一个问题,就是如果文件是中文名的话,有的用户可能下载后的文件名是乱码。

于是,我们做一下修改(参考: :

$file = “/tmp/中文名.tar.gz”;

$filename = basename($file);

header(“Content-type: application/octet-stream”);

//处理中文文件名

$ua = $_SERVER[“HTTP_USER_AGENT”];

$encoded_filename = urlencode($filename);

$encoded_filename = str_replace(“+”, “%20”, $encoded_filename);

if (preg_match(“/MSIE/”, $ua)) {

header('Content-Disposition: attachment; filename=“' . $encoded_filename . '”');

} else if (preg_match(“/Firefox/”, $ua)) {

header(“Content-Disposition: attachment; filename*=”utf8''“ . $filename . '”');

} else {

header('Content-Disposition: attachment; filename=“' . $filename . '”');

}

header('Content-Disposition: attachment; filename=“' . $filename . '”');

header(“Content-Length: “. filesize($file));

readfile($file);

输出的时候,如果是Apache + PHP mod,那么还需要发送到Apache的输出缓冲区。最后才发送给用户。而对于Nginx + fpm如果他们分开部署的话,那还会带来额外的网络IO。

php 获取文件给用户下载,让PHP更快的为用户提供文件下载_PHP教程相关推荐

  1. 【原理篇】qBittorrent下载+转种Transmission快校版+IYUU Plus辅种教程

    一.前言 之前写了篇教程,PT工具之Docker全家桶+HTTPS详细配置教程,主要讲述了使用Docker部署常用工具及反向代理上https,之前预告过还写一篇辅种教程合集的,故有了此篇教程,但是发现 ...

  2. java 一个数组key一个数组value_在各种语言中,使用key在map中获取value 和 使用下标获取数组中的数据 相比哪个更快?...

    数组和集合的效率问题数组是JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素.但是速度是要有代价的,当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里是不能改变的 ...

  3. angular8 获取文件流_基于PG12.2实现主从异步流复制及主从切换教程(上)

    概述 今天主要分享一下PG主从异步流复制搭建相关的一些理论内容,仅供参考. 一.PostgreSQL通过WAL日志构建高可靠性原理 PostgrepSQL在数据目录的子目录pg_xlog子目录中维护了 ...

  4. Java 文件压缩及下载

    /*** @author zshuo* @date 2019/3/16*/ public class FileUtil {/*** 把文件打成压缩包并保存在本地硬盘*/public static vo ...

  5. springboot:实现文件上传下载实时进度条功能【附带源码】

    0. 引言 记得刚入行的时候,做了一个文件上传的功能,因为上传时间较久,为了用户友好性,想要添加一个实时进度条,显示进度.奈何当时技术有限,查了许久也没用找到解决方案,最后不了了之. 近来偶然想到这个 ...

  6. MINIO使用说明(附文件上传下载)

    一.项目信息说明 minio Server版本:linux-amd64/minio 与 windows-amd64/minio.exe minio Client版本:linux-amd64/mc 与 ...

  7. 根据url获取文件信息

    代码: String downloadUrl = request.getUrl();//获取文件的原始下载地址 URL url = null; try {url = new URL(request.g ...

  8. php 获取文件给用户下载,php 下载文件/直接下载数据内容

    思路步骤 * 定义参数 * 魔术方法 * 执行下载 * 获取设置属性函数 * 获取设置文件mime 类型 * 获取设置下载文件名 * 设置header * 下载函数 实现代码 class DownFi ...

  9. 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名 ....

    平时根本没时间搞FTP什么的,现在这个项目需要搞FTP,为什么呢,我给大家说下项目背景,我们的一个应用程序上需要上传图片,但是用户部署程序的服务器上不让上传任何东西,给了我们一个FTP账号和密码,让我 ...

  10. ubuntu下linux:curl使用ftp获取服务器上指定目录的所有文件集合以及下载

    curl使用ftp获取服务器上指定目录的所有文件集合以及下载 直接编译可用,注意修改测试main函数内的字符串,注释我觉得写的挺详细了,跑不起来的评论区可问 头文件 #ifndef FTP_DOWNL ...

最新文章

  1. R语言层次聚类模型示例
  2. vsftpd学习笔记
  3. 正点原子stm32f429 pcb_正点原子【STM32-F407探索者】第十六章 电容触摸按键实验
  4. redux provider源码解析
  5. mysql变量string_mysql sql语句有变量 time_t变量转换为string
  6. 今天专攻POWERSHELL获取本机CPU,内存消耗
  7. MiniGUI编程--列表框
  8. java 两数之差_1_两数之和(java)
  9. 【转】解决 canvas 在高清屏中绘制模糊的问题
  10. java新的日期_java8你应该了解的新特性(新时间与日期API)
  11. 超火的ipad procreate必备神仙笔刷资源打包下载
  12. 一文带你详细了解机房搬迁工作步骤及方案,强烈建议收藏备用!
  13. php的表达爱意的一句代码,表达爱意的诗句15个字
  14. RouterPassView – 路由密码查看器
  15. python 邮件之发信人和发信地址
  16. 【科普常识:常用音频参数解析】
  17. 仿牛客项目(持续更新)
  18. 厦门考计算机竞赛保送北大清华名单,优秀!厦门这些学生将保送清华北大等名校...
  19. 概述笔记 TREC 2020|OVERVIEW OF THE TREC 2020 DEEP LEARNING TRACK
  20. 什么是装饰器 python_python三大神器===》装饰器

热门文章

  1. spring beans 的类型
  2. 【Vegas原创】VMWare下,Linux挂载、卸载新硬盘的方法
  3. iOS开发Cocoapods执行命令pod setup,执行失败解决RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
  4. 可以修改Mac地址的工具WiFiSpoof for Mac
  5. 苹果/mac提供解决方法:macOS Big Sur 更新导致旧款 MacBook Pro 黑屏变砖
  6. RabbitMq异常处理
  7. 国内移动CRM市场规模不及salesforce年营收3%
  8. Python Django开发中XSS内容过滤问题的解决
  9. Debian更新软件源提示There is no public key available for the following key IDs的解决方法
  10. 【USACO 2.2】Subset Sums (DP)