我在Dreamhost上使用mod_xsendfile下载大型zip文件(50mb +)
我启用了mod_xsendfile,并在.htaccess中使用了“XSendFile on”。
当我给出
header('X-Sendfile: "'.$fullPath.'"');
命令,使用服务器上存在确实的文件的完整路径,我收到的网页找不到错误。
readfile()发现文件很好并提供服务,但.zip文件已经太大了,无法处理。
您可以提供任何帮助,我们将不胜感激!
答案 0 :(得分:3)
实际上有一个apache / xsendfile配置值。
在您的主机配置中,您只需添加:
XSendFilePath /tmp
/tmp
位于xsendfile能够访问的位置。它是白名单,我相信你可以添加多个白名单。
例如:
<Directory /var/www/mysite/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
XSendFile On
XSendFilePath /tmp
</Directory>
答案 1 :(得分:2)
我遇到了同样的问题,并且能够解决它,所以这个解决方案可能适合你。
要做的第一件事是检查Apache错误日志(对我来说,位于/ etc / httpd / logs中)。这就是我在我的发现:
[Wed Sep 05 14:29:02 2012] [error] [client ?.?.?.?] (20023)The given path was above the root path: xsendfile: unable to find file: /path/to/file
问题是,我想要服务的文件位于httpd.conf中定义的DocumentRoot(对我来说,/ var / www / html)上面。
我的解决方案是在DocumentRoot目录中创建一个符号链接,该符号链接指向包含我要提供的文件的目录。我使用了以下命令:
ln -s /path/to/file_dir /path/to/doc_root/file_dir
然后,我所要做的就是将PHP点xSendFile添加到符号链接:
header("X-SendFile: /path/to/doc_root/file_dir/file_name.ext");
答案 2 :(得分:0)
我终于找到了最简单的解决方案:
header('X-Sendfile: '.realpath(dirname(__FILE__)).'/'.$the_rest_of_path);
这种方式对我来说非常合适。
答案 3 :(得分:-3)
header('X-Sendfile: '.$fullPath);