XSendfile无法正常工作-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文件中:

上的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>

再见

上一篇:php-如何使用.htaccess从url隐藏文件夹名称


下一篇:性能-其他解决方案,而不是NGINX的.htaccess