在linux上使用modxsendfile使用PHP下载大文件
我需要使用在linux上使用modxsendfile使用PHP下载大文件,php,linux,apache,plesk,x-sendfile,Php,Linux,Apache,Plesk,X Sendfile,我需要使用PHP和身份验证从我的Web服务器提供非常大的文件(1Gb+),这样只有一些客户有权下载文件 我不想使用直接链接,由于内存和超时限制,使用PHP脚本来提供文件不是一个选项 我的Web服务器使用Plesk进行管理,并在Apache/CentOS6上运行。选择的解决方案是在CentOS服务器上安装mod_xsendfile,对其进行配置,并在用户身份验证后发送带有PHP头的文件 在Centos上安装mod_xsendfile。您需要启用EPEL存储库以获取xsendfile,然后执行以下简
PHP
和身份验证从我的Web服务器提供非常大的文件(1Gb+),这样只有一些客户有权下载文件
我不想使用直接链接,由于内存和超时限制,使用PHP
脚本来提供文件不是一个选项
我的Web服务器使用
Plesk
进行管理,并在Apache
/CentOS
6上运行。选择的解决方案是在CentOS服务器上安装mod_xsendfile,对其进行配置,并在用户身份验证后发送带有PHP头的文件
在Centos上安装mod_xsendfile。您需要启用EPEL存储库以获取xsendfile,然后执行以下简单操作:
yum update
yum install mod_xsendfile
之后,您可以使用以下方法检查模块是否正确安装:
apachectl -M | grep xsendfile
配置/Plesk部分。Plesk自动生成每个httpd.conf文件,因此手动修改文件是危险的,因为通过Plesk UI所做的任何更改都可能覆盖这些文件。默认情况下,http.conf文件包括vhost.conf和vhost_ssl.conf,用于存储的虚拟主机
/var/www/vhosts/system/[yourvhostname]/conf
您可以通过ssh或使用Plesk UI界面(vhost->server settings->其他apache指令)编辑它们。对于非Plesk用户,只需在httpd.conf的正确vhost部分下添加以下指令
我第一次遇到一些问题,原因是服务器发送了0字节的文件,经过一些测试,我发现正确的指令是:
<Directory "/">
EnableSendfile on
XSendFile on
# Absolute path, no trailing slash!
XSendFilePath "/var/www/vhosts/[yourvhostname]/storage"
</Directory>
希望这能帮助人们避免数小时的测试。达里奥上面的评论真的很有帮助。我只是想添加我用于Laravel return语句的内容,以确保文件命名正确:
return response(null)
->header('Content-Type' , 'application/octet-stream')
->header('Content-Disposition', 'attachment; filename="' . $filename . "')
->header('X-Sendfile', $fullfilepath);
在普通PHP中,头只是字符串,所以
头('X-Sendfile:'。$filepath)代码>将是一个人想要使用的。
return response(null)
->header('Content-Type' , 'application/octet-stream')
->header('Content-Disposition', 'attachment; filename="' . $filename . "')
->header('X-Sendfile', $fullfilepath);