我正在尝试使用代码点火器框架中的 xsendfile 向用户发送文件。
一切都安装正确,我的问题是它似乎只能从路线上工作,即使每个页面都来自 index.php 。
这是我的功能:
function _output_file($name, $root_location, $public_location = FALSE)
{
if (function_exists('apache_get_modules') && in_array('mod_xsendfile', apache_get_modules())) {
header ('Content-Description: File Transfer');
header ('Content-Type: application/octet-stream');
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE") != FALSE) {
header ('Content-Disposition: attachment; filename='.urlencode($name));
} else {
header ('Content-Disposition: attachment; filename="'.$name.'"');
}
//86400 is one day
header ('Expires: '.gmdate('D, d M Y H:i:s', (TIME_NOW + 86400)));
header ('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header ('Pragma: public');
header ('X-Sendfile: '.$root_location);
exit;
} else {
redirect(site_url($public_location));
}
}
如果我把它放在我的 index.php 的顶部并加载根它工作正常,但如果我尝试从 domain.com/controller/function 访问它,它会返回 404 错误。
它肯定是在使用 index.php 文件,因为如果我用 die("test"); 替换函数调用;这显示在屏幕上。
我相信这与 xsendfile 必须访问该文件的权限有关,但由于它是从根 index.php 工作的,我原以为它会拥有完整的权限,大概它基于请求 url 是什么,我觉得很奇怪.
所以....有没有人对我如何让xsendfile通过codeigniter工作有任何建议,比如“domain.com/files/get/12”这样的url?