XSendfile不能正常工作 - PHP,Apache,Cpanel

时间:2012-01-03 04:33:13

标签: php apache .htaccess config x-sendfile

我强烈建议使用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 ayway中这样做,因为我没有直接访问apache配置,我宁愿控制使用htaccess应该提供它。

当然,如果我能让它发挥作用。

所以,我已经将以下内容添加到htaccess文件中:

XSendFile on XSendFilePath / home / deli / central XSendFileAllowAbove On

(从脚本到中央文件目录的相对路径是../../ deli / central)

如果我将这些行添加到htaccess,并将其放在public_html目录(与测试脚本相同的目录)中,那么当我运行测试脚本时,我会收到500错误。快速查看错误日志显示:

/home/north/public_html/.htaccess:此处不允许使用XSendFilePath

任何人都可以告诉我任何我可能做错的事情吗?

ps - 我刚刚读到,在apache配置中执行它会更有效率,因此服务器不必爬行并加载所有htaccess文件。不知道这是否属实。

非常感谢帮助,这对项目来说有点显而易见:)

ps我忘了提 - 如果我直接强制下载到脚本中,使用相同的$ file路径,文件下载就好了。所以这条路似乎是正确的。

2 个答案:

答案 0 :(得分:3)

我希望这能帮助别人......

我遇到了这样的问题:无论何时何地 - > 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>

答案 1 :(得分:1)

如果您获得0字节,则可能会禁用输出压缩需求,请参阅here for more。对于 XSendFilePath不允许错误,这是.htaccess的语法问题。如果可以确保它位于正确的位置per the documentation,请手动检查。