php以不同名字下载同一个文件(x-sendfile) 【转】
1、linux 下nginx默认支持x-sendfile模式
Nginx 默认支持该特性,不需要加载额外的模块。需要发送的 HTTP 头为 X-Accel-Redirect。另外,需要在配置文件中做以下设定
location /protected/ { internal; root /some/path; }
internal 表示这个路径只能在 Nginx 内部访问,不能用浏览器直接访问防止未授权的下载。
PHP发送 X-Accel-Redirect 给 Nginx:
<?php $filePath = '/protected/iso.img'; header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($file) . '"'); //让Xsendfile发送文件 header('X-Accel-Redirect: '.$filePath); ?>
这样用户就会下载到 /some/path/protected/iso.img 这个路径下的文件。
如果你想发送的是 /some/path/iso.img 文件,那么 Nginx 配置应该是
location /protected/ { internal; alias /some/path/; # 注意最后的斜杠
}
2、windows下的apache,需要加载module mod_xsendfile
从https://tn123.org/mod_xsendfile/下载Win32 binaries,放到apache的modules目录下,在http.conf中配置
LoadModule xsendfile_module modules/mod_xsendfile.so XSendFile On
<?php $file = "/tmp/dummy.tar.gz";//要用绝对路径,windows下比如d:\tmp\ header("Content-type: application/octet-stream"); header('Content-Disposition: attachment; filename="' . basename($file) . '"'); header("X-Sendfile:".$file);
但是这个有一个问题, 就是如果文件是中文名的话, 有的用户可能下载后的文件名是乱码.
于是, 我们做一下修改(参考: :
<?php $file = "/tmp/中文名.tar.gz";
$filename = basename($file);
header("Content-type: application/octet-stream");
//处理中文文件名 if (strpos($_SERVER["HTTP_USER_AGENT"],"MSIE") === false) header('Content-Disposition: attachment; filename="' . ($name) . '"'); else header('Content-Disposition: attachment; filename="' . rawurlencode($name) . '"');
//让Xsendfile发送文件 header("X-Sendfile: $file");
X-Sendfile头将被Apache处理, 并且把响应的文件直接发送给Client.
原文地址:http://blog.csdn.net/ownfire/article/details/11522213
php以不同名字下载同一个文件(x-sendfile) 【转】的更多相关文章
- 使用Keil uVision下载hex文件
在uVision3/uVision4/uVision5中,可以创建一个项目用来下载HEX文件到flash里面. 具体步骤如下: 1. 在菜单中,选择 Project - New Project... ...
- 使用php下载的文件打不开,自己用着没问题,客户用就不行?
1 现象: 开发的时候用的好好的文件下载功能,部署到客户那边就不好使了,几乎所有从服务器下载下来的文件都不能打开. 比较了上传前的文件.上传后服务器端的文件.下载后本机的文件,发现同一个文件,上传后还 ...
- Android的断点续传的下载在线文件示例
Android的断点续传的下载在线文件示例 文件的结构如下: activity_main.xml: <LinearLayout xmlns:android="http://schema ...
- 使用java的 htpUrlConnection post请求 下载pdf文件,然后输出到页面进行预览和下载
使用java的 htpUrlConnection post请求 下载pdf文件,然后输出到页面进行预览和下载 2018年06月07日 10:42:26 守望dfdfdf 阅读数:235 标签: jav ...
- Google Drive 和 Dropbox 同步同一个文件夹目录
Dropbox 也是非常棒的同步工具,例如先进的增量上传或者更开放的 API 等.可是为什么不曾想过把 Google Drive 和 Dropbox 同时使用呢,我是说,让这两者同时云同步同一个文件 ...
- 避免同一个文件被#include多次,可以用以下两种方式
1.#ifndef方式 2.#pragma once方式 方式一: #ifndef _SOMEFILE_H_ #define _SOMEFILE_H_ ... ...//一些声明语句 #end ...
- 如何在GitHub上下载一部分文件(单个文件夹)
Preface Github下的项目可能很大,里面有很多的子文件夹,我们可能只需要使用某个子目录下的资源,可以不用下载完整的repo就能使用. 例如,我想下载这个repo中的mnist_gan文件:h ...
- 校验文件是否是同一个文件,以及mac中使用MD5命令
背景 sz了war包,因为查看不到里面的内容,并不确定是否是同一个文件. 解决 通过MD5校验 md5sum xxxx 但是在mac中是没有这个命令的下载半天没下载下来,下面是快捷操作. 1.打开终端 ...
- 路由器OpenWrt如何脱机(离线)下载BT文件
路由器OpenWrt如何脱机(离线)下载BT文件 1.首先到如下网址下载OpenWrt固件(确保为路由器正确型号). http://downloads.openwrt.org/snapshots/tr ...
随机推荐
- 虚拟化 - kvm安装
vmware centos6.5 64位 kvm虚拟化安装配置 安装 centos 64位 1.推荐配置 内存 2G 硬盘50G,或者再单独分一个磁盘,用来存储虚拟机文件 最关键的一步,在创建虚拟机时 ...
- 201671010127 2016-2017-18 Java期末总结
通过本学期Java课程的学习,我对于面向对象的编程语言有了进一步的了解.首先面向对象编程的特点是抽象.封装.继承.多态.由于已经学过c语言,所以对Java的学习实际上是从第四章对向与类开始的,然后学习 ...
- web前端整套面试题(二)--今日头条面试题
12道单选,7道不定项选择,2道编程题 一.单选(12题) 1.[单选题]在HTML中,( )可以在网页上通过链接直接打开邮件客户端发送邮件. A.<a href=”telnet:ming.zh ...
- 网页静态化解决方案:Freemarker生成简单html页面
FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不仅 ...
- TEXTBOX属性TEXTMODE设置为PASSWORD后,后台不能给这个TEXTBOX赋值原因
TEXTBOX属性TEXTMODE设置为PASSWORD后,后台不能给这个TEXTBOX赋值原因? 在开发中,会在用户管理等修改页面中设置密码的显示.但是直接给TextBox的Text属性赋值在前台无 ...
- MySQL多表查询回顾
----------------------siwuxie095 MySQL 多表查询回顾 以客户和联系人为例(一对多) 1.内连接 /*内连接写法一*/ select * from t_custom ...
- require.js的用法(转)
一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代 ...
- Nginx 事件基本处理流程分析
说明:本文章重点关注事件处理模型.有兴趣的同学可以去http://tengine.taobao.org/book/查找更多资料.Tengine应该是淘宝基于Nginx自己做的修改.这个地址的文档还在不 ...
- p1429 平面最近点对(加强版)
传送门 分析 我们可以枚举每一个点算它的最近点 估价函数应该分为3种情况计算: 大于max,小于min,位于min和max之间 代码 #include<iostream> #include ...
- g2o的使用
相关文献 1.论文 Grisetti, Giorgio, et al. “A tutorial on graph-based SLAM.” IEEE Intelligent Transportatio ...