2012-01-03 70 views
1

我一直强烈建议使用XSendfile,因为我们服务的服务器上的文件非常大。服务器正在运行Cpanel。之前我们使用的是直接下载的脚本,在某些浏览器中也不能很好地工作。希望用XSendfile一箭双雕。XSendfile无法正常工作 - PHP,Apache,Cpanel

好吧,我们的主机在我们的服务器上启用了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 /家庭/熟食店/中央 XSendFileAllowAbove在

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

如果我将这些行添加到htaccess中,并将其放入public_html目录(与测试脚本相同的目录),然后运行测试脚本时, 500错误。快速浏览一下错误日志显示:

/home/north/public_html/.htaccess:XSendFilePath这里不允许

谁能赐教,以什么我可能是做错了?

ps - 我刚刚读到它在apache配置中执行效率高很多,因此服务器无需抓取并加载所有htaccess文件。不知道这是否属实。

帮助是非常赞赏,这是一个位在该项目:)

PS一个搅局者的我忘了提 - 如果我把在一条直线力下载到脚本,使用相同的$文件路径,文件下载就好了。所以这条路似乎是正确的。

+0

您正尝试从'/ home/deli/...'提供文件,但您的'.htaccess'文件位于不同路径'/ home/north/...'中。你确定正确的用户(运行Apache进程)可以访问'/ home/deli'路径吗? – leftclickben 2013-02-06 03:36:41

回答

1

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

+0

嗨,感谢您的回答。好吧,我已经要求我们的服务器管理员将以下内容添加到apache配置文件 - XSendFile XSendFileAllowAbove On - 他们说他们已经这样做了,但无论我尝试什么,我仍然接收零字节文件。我也尝试将这两行添加到根.htaccess文件中。在该文件中,我有以下 - 选项-Indexes 的ErrorDocument 404 /index.html 的ErrorDocument 403 /index.html XSendFile在 XSendFileAllowAbove在 – 2012-01-08 10:23:49

+0

..ps也,我已经在.htaccess使用XSendFilePath尝试,但这样也给我一个500错误。 – 2012-01-08 10:35:58

+0

嗨 - 没有必要在这一个进一步的帮助,现在整理出来。谢谢你的帮助。 – 2012-01-09 05:01:10

3

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

我是有这样的问题:当和任何 - I解决> 0字节

这从虚拟主机部

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

移动

XSendFile On 
XSendFilePath /var/1000italy/data/offline 

到目录节

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

Ciao

+1

目录部分也开始在我的服务器上工作。谢谢 – Sergey 2015-06-03 06:24:35