php 获取文件给用户下载,让PHP更快的为用户提供文件下载_PHP教程
但是,这样做,就没办法做一些统计,权限检查,等等的工作。于是,很多时候,我们采用让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教程相关推荐
- 【原理篇】qBittorrent下载+转种Transmission快校版+IYUU Plus辅种教程
一.前言 之前写了篇教程,PT工具之Docker全家桶+HTTPS详细配置教程,主要讲述了使用Docker部署常用工具及反向代理上https,之前预告过还写一篇辅种教程合集的,故有了此篇教程,但是发现 ...
- java 一个数组key一个数组value_在各种语言中,使用key在map中获取value 和 使用下标获取数组中的数据 相比哪个更快?...
数组和集合的效率问题数组是JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素.但是速度是要有代价的,当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里是不能改变的 ...
- angular8 获取文件流_基于PG12.2实现主从异步流复制及主从切换教程(上)
概述 今天主要分享一下PG主从异步流复制搭建相关的一些理论内容,仅供参考. 一.PostgreSQL通过WAL日志构建高可靠性原理 PostgrepSQL在数据目录的子目录pg_xlog子目录中维护了 ...
- Java 文件压缩及下载
/*** @author zshuo* @date 2019/3/16*/ public class FileUtil {/*** 把文件打成压缩包并保存在本地硬盘*/public static vo ...
- springboot:实现文件上传下载实时进度条功能【附带源码】
0. 引言 记得刚入行的时候,做了一个文件上传的功能,因为上传时间较久,为了用户友好性,想要添加一个实时进度条,显示进度.奈何当时技术有限,查了许久也没用找到解决方案,最后不了了之. 近来偶然想到这个 ...
- MINIO使用说明(附文件上传下载)
一.项目信息说明 minio Server版本:linux-amd64/minio 与 windows-amd64/minio.exe minio Client版本:linux-amd64/mc 与 ...
- 根据url获取文件信息
代码: String downloadUrl = request.getUrl();//获取文件的原始下载地址 URL url = null; try {url = new URL(request.g ...
- php 获取文件给用户下载,php 下载文件/直接下载数据内容
思路步骤 * 定义参数 * 魔术方法 * 执行下载 * 获取设置属性函数 * 获取设置文件mime 类型 * 获取设置下载文件名 * 设置header * 下载函数 实现代码 class DownFi ...
- 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名 ....
平时根本没时间搞FTP什么的,现在这个项目需要搞FTP,为什么呢,我给大家说下项目背景,我们的一个应用程序上需要上传图片,但是用户部署程序的服务器上不让上传任何东西,给了我们一个FTP账号和密码,让我 ...
- ubuntu下linux:curl使用ftp获取服务器上指定目录的所有文件集合以及下载
curl使用ftp获取服务器上指定目录的所有文件集合以及下载 直接编译可用,注意修改测试main函数内的字符串,注释我觉得写的挺详细了,跑不起来的评论区可问 头文件 #ifndef FTP_DOWNL ...
最新文章
- R语言层次聚类模型示例
- vsftpd学习笔记
- 正点原子stm32f429 pcb_正点原子【STM32-F407探索者】第十六章 电容触摸按键实验
- redux provider源码解析
- mysql变量string_mysql sql语句有变量 time_t变量转换为string
- 今天专攻POWERSHELL获取本机CPU,内存消耗
- MiniGUI编程--列表框
- java 两数之差_1_两数之和(java)
- 【转】解决 canvas 在高清屏中绘制模糊的问题
- java新的日期_java8你应该了解的新特性(新时间与日期API)
- 超火的ipad procreate必备神仙笔刷资源打包下载
- 一文带你详细了解机房搬迁工作步骤及方案,强烈建议收藏备用!
- php的表达爱意的一句代码,表达爱意的诗句15个字
- RouterPassView – 路由密码查看器
- python 邮件之发信人和发信地址
- 【科普常识:常用音频参数解析】
- 仿牛客项目(持续更新)
- 厦门考计算机竞赛保送北大清华名单,优秀!厦门这些学生将保送清华北大等名校...
- 概述笔记 TREC 2020|OVERVIEW OF THE TREC 2020 DEEP LEARNING TRACK
- 什么是装饰器 python_python三大神器===》装饰器
热门文章
- spring beans 的类型
- 【Vegas原创】VMWare下,Linux挂载、卸载新硬盘的方法
- iOS开发Cocoapods执行命令pod setup,执行失败解决RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
- 可以修改Mac地址的工具WiFiSpoof for Mac
- 苹果/mac提供解决方法:macOS Big Sur 更新导致旧款 MacBook Pro 黑屏变砖
- RabbitMq异常处理
- 国内移动CRM市场规模不及salesforce年营收3%
- Python Django开发中XSS内容过滤问题的解决
- Debian更新软件源提示There is no public key available for the following key IDs的解决方法
- 【USACO 2.2】Subset Sums (DP)