我安装了mod_xsendfile,它似乎已经成功;xsendfile.load出现在/etc/apache 2/mods-enabled中,并且我在运行测试脚本时没有发现任何错误。但是,每次运行它时,我都会收到一个0 B文件。
下面是我的测试脚本:
$file = 'sample.mp4';
$path = '/var/storage/media/'.$file;
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header("Content-type: application/octet-stream");
header("X-Sendfile: $path");
显然,我有一个文件存储在/var/storage/media/sample.mp4中,它只有25 MB,如果我这样做,它会非常好地服务:
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($path));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($path));
ob_clean();
flush();
readfile($path);
exit;
我在/var/storage和/var/www的.htaccess文件中也有这些内容(包含所有这些内容的文件存储在/var/www/files/index. php中):
XSendFile on
XSendFileAllowAbove on
就像我说的,我没有得到错误,PHP可以肯定地访问文件,但我一定是错过了一些与x-sendfile配置...这提醒了我,我注意到在mods-enabled几乎每个mod都有一个.load和.conf,但xsendfile只有.load,但也有一些其他人,所以这有什么关系吗?
谢谢。
5条答案
按热度按时间bakd9h0s1#
我遇到了同样的问题,这个解决方案对我很有效:
安装模块后,您需要启用它并给予Apache配置的访问路径(全局配置为
httpd.conf
,特定配置为特定站点vhosts
),如下所示:当然,您必须将
/var/www/
替换为您希望xsendfile
能够访问的任何文件夹fdbelqdn2#
如果使用Apache,请确保在Apache配置中打开XSendFile。如果不这样做,它看起来会工作,但会提供空文件。
例如:
baubqpgj3#
我在Ubuntu 14.04和Apache/2.4.7上使用它。重要的是:
1.每种主机配置的设置:
1.添加到.htaccess:
当我只使用1;它让我不断下载空文件。添加2后,工作得很好。
mwkjh3gx4#
在Windows上,我必须使用以下命令才能在docroo之外提供文件,其他所有命令都是404
XSendFilePath C:/
mnemlml85#
尝试将**
header("X-Sendfile: $path");
作为文件中的第一个header()
**调用。再看看这个。看起来像是一个类似的问题,它可能会给予你一些想法:
X-Sendfile Error