找不到Xsendfile文件

时间:2011-09-21 02:28:43

标签: php file

我在Dreamhost上使用mod_xsendfile下载大型zip文件(50mb +)

我启用了mod_xsendfile,并在.htaccess中使用了“XSendFile on”。

当我给出

header('X-Sendfile: "'.$fullPath.'"');

命令,使用服务器上存在确实的文件的完整路径,我收到的网页找不到错误。

readfile()发现文件很好并提供服务,但.zip文件已经太大了,无法处理。

您可以提供任何帮助,我们将不胜感激!

4 个答案:

答案 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);