XSendfile not working - PHP, Apache, Cpanel


XSendfile not working - PHP, Apache, Cpanel

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

XSendFileXSendFilePath/home/deli/centralXSendFileAllowAbove

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

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

/home/北/public_html/。htaccess: XSendFilePath不被允许

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

ps -我刚读到在apache配置中这样做更有效,所以服务器不必爬过并加载所有的htaccess文件。不知道这是真的还是假的。

非常感谢你的帮助,这对这个项目来说有点碍眼。

我忘了提-如果我在脚本中直接强制下载,使用相同的$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>

再见

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