apache 添加xsendfile支持

By | 2016/04/18

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

apache下xsendfile组件的安装

  1. https://tn123.org/mod_xsendfile/从这里下载对于系统的组件,或编译,或直接添加。组件文件放到apache目录下的module目录。
  2. 编辑httpd.conf文件,添加LoadModule xsendfile_module modules/mod_xsendfile.so指令。此时可以重启apache服务,测试是否可以正常开启,如果可以证明组件加载成功。
  3. 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的提示)。记得重启服务。

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

xsendfile常见错误

1.500错误

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

2.404错误

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据