强烈建议使用XSendfile,因为我们正在从服务器提供很大的文件.服务器正在运行Cpanel.以前,我们使用的是直接强制下载脚本,该脚本在某些浏览器中也无法正常运行.希望使用XSendfile用一块石头杀死两只鸟.
好的,我们的主机已在服务器上启用Xsendfile.我写了一个快速测试脚本:
$file = "/home/deli/central/testfile.doc";
header("X-Sendfile: $file");
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
exit;
当我运行它时,我得到下载提示.但是发送的文件始终为0kb.
进行一些研究,似乎您需要在apache配置文件或htaccess文件中设置各种设置.还告诉我,将其添加到apache配置不是一个好主意,否则在更新时可能会被覆盖.我宁愿在htaccess中也这样做,因为我没有直接访问apache配置的权限,而我宁愿拥有使用htaccess进行控制的控制权.
如果可以的话,当然可以.
因此,我将以下内容添加到htaccess文件中:
上的XSendFile
XSendFilePath / home / deli / central
XSendFileAllowAbove开启
(从脚本到*文件目录的相对路径是../../deli/central)
如果我将这些行添加到htaccess中,并将其放在public_html目录(与测试脚本相同的目录)中,则当我运行测试脚本时出现500错误.快速查看错误日志显示:
/home/north/public_html/.htaccess:此处不允许使用XSendFilePath
有人能启发我做错什么吗?
ps-我刚刚读到,在apache配置中执行此操作效率更高,因此服务器不必搜寻并加载所有htaccess文件.不知道这是不是真的.
非常感谢您的帮助,这在项目上有点困难:)
ps我忘了提到-如果我使用相同的$file路径直接强制下载到脚本中,则文件下载就可以了.因此,路径似乎是正确的.
解决方法:
我希望这会帮助某人…
我遇到了这样的问题:无论何时何地-> 0字节
我解决了此举
XSendFile On
XSendFilePath /var/1000italy/data/offline
从virtualHost部分
<VirtualHost *:80>
DocumentRoot "/var/{{ app_name }}/web"
ServerName {{ app_name }}.dev
# here was the problem
XSendFile On
XSendFilePath /var/1000italy/data/offline
<Directory "/var/{{ app_name }}/web">
allow from all
Options -Indexes
AllowOverride All
</Directory>
ErrorLog /var/log/apache2/{{ app_name }}_error.log
CustomLog /var/log/apache2/{{ app_name }}_access.log combined
</VirtualHost>
到目录部分
<VirtualHost *:80>
DocumentRoot "/var/{{ app_name }}/web"
ServerName {{ app_name }}.dev
<Directory "/var/{{ app_name }}/web">
allow from all
Options -Indexes
AllowOverride All
# HERE EVERYTHING WORKS FINE
XSendFile On
XSendFilePath /var/1000italy/data/offline
</Directory>
ErrorLog /var/log/apache2/{{ app_name }}_error.log
CustomLog /var/log/apache2/{{ app_name }}_access.log combined
</VirtualHost>
再见