Search

与我们合作

我们专注:网站策划设计、网络多媒体传播、网站优化及网站营销、品牌策略与设计
主营业务:网站建设、移动端微信小程序开发、VI设计、网络运营、云产品·运维解决方案

有一个品牌项目想和我们谈谈吗?

您可以填写右边的表格,让我们了解您的项目需求,这是一个良好的开始,我们将会尽快与您取得联系。当然也欢迎您给我们写信或是打电话,让我们听到您的声音

您也可通过下列途径与我们取得联系:

地 址: 深圳.龙岗区大运软件小镇11栋3楼

电 话: 138 2888 4598 / 138 0880 9053

网 址: http://www.appvx.cn

快速提交您的需求 ↓

php不读取文件而让Apache来读取文件让用户下载

时间:2017-07-26 浏览:3601 编辑:SW 来源:技术博客

首先,我们如果做个php网站,里面有个文件,要让php读取它,并给用户下载。很常见的方法是

$file = “aaa.rar”;

header(“Content-type: application/octet-stream”);  //必须更改头,否则浏览器无法识别 你们这帮货在玩下载

header(‘Content-Disposition: attachment; filename=”‘ . basename($file) . ‘”‘);  //弹出的下载框 需要文件名readfile($file);  //对于这句话 大家注意一下

这里实际上 有几个过程

1、php首先狗一样的IO读取

2、发送给apache缓冲区

3、apache发送给浏览器

然后用户才能下载。

这里面如果你网站PV比较高的话,那么php那一步狗一样的读取是很耗费IO资源的。所以今天我们要解决的是让apache直接读取,避开php那一步。

于是我们就要用到一个apache(apache2系列)模块。 这个模块其实很简单、很好用。

源码版本,如果要部署到Linux 中,则要编译。是个C源码文件。

更多版本,可以移步 https://github.com/nmaier/mod_xsendfile 去下。 这里面有针对 apache 2/2.2.x/2.4.x 各个apache版本的x-sendfile模块。自行下载即可。

windows部署。

这个实在太简单。找到你的apache目录,找到modules目录。然后把下载下来的 mod_xsendfile.so 放进去

然后打开你的apache配置文件,随便找个犄角旮旯 放入这么一行

LoadModule xsendfile_module modules/mod_xsendfile.so   #前面不能有 ‘#’ 号,否则等于没放

重启 Apache 就算好了

linux部署。

首先我们要安装apache的一个扩展工具–apxs, apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具。

这里我们使用yum安装。 (yum是什么不知道的话,就不要看下去了。对身体不好)

yum -y install httpd-devel

装好后执行 

which  apxs 

默认会出现 /use/sbin/apxs 。

然后利用 apxs 安装xsendfile模块到apache中

apxs -cia mod_xsendfile.c

注意,你必须吧这个mod_xsendfile.c 下载下来传到你的linux服务器中,然后cd到这个文件所在目录执行上述命令。

-cia选项表示编译(compile)、安装(install)以及启动(active)–> a选项会自动添加如下模块在配置文件httpd.conf中 .如果你不喜欢可以把a选项去掉。然后手工加入模块引用,请参照windows 方法。没啥区别

重启 apache

接下里就是写php代码了。

其实就一句话不一样。

$file = “aaa.rar”;

header(“Content-type: application/octet-stream”);  //必须更改头,否则浏览器无法识别 你们这帮货在玩下载

header(‘Content-Disposition: attachment; filename=”‘ . basename($file) . ‘”‘);  //弹出的下载框 需要文件名

header(“X-Sendfile: “.$file);  //让xsendfile模块去发送这个文件,这样就绕过了 php读取这一层。效率明显提高了

注意,之前还有一些教大家修改配置文件、修改模块的文章和方法。如果你改完后 就是不记得重启apache,我真的没法帮你更多了。


本站文章均为深正网站建设摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,但谢绝直接搬砖和抄袭!感谢...
GO 欣赏案例
查看经典案例
在线咨询
电话咨询
0755-36630177
返回顶部
在线咨询 获取报价 电话咨询
获取报价
您的称呼:

*

您的电话:

*

您的邮箱:

*

提交 重置
重要的事情,电话里聊

接通客服

不方便的时候线上咨询,在线等哦