1

强烈建议我使用 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 文件中添加了以下内容:

XSendFilePath 上的 XSendFile /home/deli/central XSendFileAllowAbove On

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

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

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

谁能告诉我我可能做错了什么?

ps - 我刚刚读到在 apache 配置中执行此操作效率更高,因此服务器不必爬取并加载所有 htaccess 文件。不知道这是真是假。

非常感谢您的帮助,这对项目来说有点令人兴奋:)

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

4

2 回答 2

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>

再见

于 2014-05-08T16:48:28.317 回答
1

如果您得到 0 字节,则可能需要禁用输出压缩,请参阅此处了解更多信息。对于XSendFilePath not allowed here错误,这是您的 .htaccess 的语法问题。如果可以,请手动检查它,以确保它在文档中的正确位置。

于 2012-01-05T15:29:58.510 回答