php X-sendfile,apache 添加xsendfile支持

xsendfile是lighttpd里面的一个特性,同时nginx也是支持的。在我们提供文件下载、图片展示功能时,可能需要让php进行条件判断后(比如权限判断、扣除下载点数等),再循环读文件进行传输。这样做小文件还好,当遇到大文件时就会占用较多的内存资源,同时减慢了文件的传输速度。这个时候就需要xsendfile特性了,通过header发送xsendfile标记,可以直接把需要传输的文件直接交给web服务处理,大大减少了后台语言的资源占用,也加快了传输速度。

apache下xsendfile组件的安装

https://tn123.org/mod_xsendfile/从这里下载对于系统的组件,或编译,或直接添加。组件文件放到apache目录下的module目录。

编辑httpd.conf文件,添加LoadModule xsendfile_module modules/mod_xsendfile.so指令。此时可以重启apache服务,测试是否可以正常开启,如果可以证明组件加载成功。

xsendfile默认是关闭状态的,需要在virtual host(配置虚拟机的地方)添加两条指令

XSendFile on

XSendFilePath C:/xampp/htdocs/

注意,xsendfile其实是可以添加到.htaccess文件的,但xsendfilepath是不可以的,为了方便建议一块放到virtual host里面。同时xsendfilepath是必须配置的,因为如果不配置的话,php脚本只能调用当前及子目录的文件,其他目录会得到404错误,虽然你的路径并没有错(error文件会有The given path was above the root path的提示)。记得重启服务。

脚本添加header(‘X-Sendfile: b75f123c41f1c100ba06fb2a.jpg’);测试是否成功

xsendfile常见错误

1.500错误

很有可能就是指令的位置放错了,或者添加模块的时候模块名重复之类,通过查看官方文档修正指令位置,及确保模块名不重复、位置正确。

2.404错误

在windows下面\和/是都可以完美支持的,所以首先要确定你文件位置是否真的准确,对应的文件是否真的存在。error是查找根本原因的好地方,如果error没有其他错误,一般就是上面的原因。如果是权限之类的错误,会有错误提示的。同时要特别注意上面加粗部分,这也是404的原因之一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值