Php Codeigniter:保护文件夹不被直接访问

Php Codeigniter:保护文件夹不被直接访问,php,codeigniter,Php,Codeigniter,大家好,我有一个与数据库连接的小项目。我拥有一个 将文件上载到文件夹,并将文件保存到数据库的路径。 在我的索引页面中,我从数据库中读取文件路径,并输出一个表,其中包含指向这些文件的链接,以便下载。 一切正常,文件可以下载,除非, 问题是我忘了保护这个文件夹,昨天意识到我应该以某种方式保护它,因为人们可以通过链接直接下载文件 我需要检查用户是否已登录才能下载它 所以我的问题是: 如何保护包含这些文件的文件夹,使其不被直接访问,并使其仅成为已登录用户 要能够从此文件夹下载文件,请执行以下操作: 我的

大家好,我有一个与数据库连接的小项目。我拥有一个 将文件上载到文件夹,并将文件保存到数据库的路径。 在我的索引页面中,我从数据库中读取文件路径,并输出一个表,其中包含指向这些文件的链接,以便下载。 一切正常,文件可以下载,除非, 问题是我忘了保护这个文件夹,昨天意识到我应该以某种方式保护它,因为人们可以通过链接直接下载文件 我需要检查用户是否已登录才能下载它

所以我的问题是: 如何保护包含这些文件的文件夹,使其不被直接访问,并使其仅成为已登录用户 要能够从此文件夹下载文件,请执行以下操作:

我的上传路径是./uploads/在这个文件夹中,我有一个htaccess文件

order deny,allow
deny from all
在控制器中,我有

public function viewAllPersons()
{
如果($this->ion\u auth->logged\u in())
{
如果(!$this->ion\u auth->in\u组(1)){
show_404();
}
否则{
$data=array();
$data['persons']=$this->get_persons();//以数组形式从数据库中获取所有人员
$this->load->view('admin/header_view');
$this->load->view('admin/persons\u view',$data);//将数据传递给视图
$this->load->view('admin/footer_view');
}
}否则{
重定向(base_url());
}
}

我的视图文件包含以下内容

{


档案文件
所有记录数据库
}
这里是我的问题,当我输出链接到文件时,我需要检查用户是否已登录,然后才能使用保存在数据库中的链接下载文件

因为人们可以通过直接链接下载文件 范例

一旦我有了htaccess文件,我就无法下载文件,可能需要一个函数来重写规则或 以某种方式授予登录用户访问权限

我还尝试了从codeigniter下载帮助程序,但只有在删除htaccess规则的情况下才能下载文件,如果htaccess文件中存在规则,则下载帮助程序无法下载文件。
提前谢谢

您有几种可能,最简单的可能是使用控制器控制对这些文件夹的访问

您需要一个文件表,其最小值为:
id
path
。 假设用户A想要文件ABC.jpg(id为1337):您给他的不是服务,而是服务

此路由调用控制器文件的索引,在索引中可以执行以下伪代码:

function index() {
    //Check if logged in
    if (!$user->logged()) {
        redirect('/404');
    }
    //Get file from database
    $file = $this->db->query('SELECT * FROM file WHERE id='.$this->input->get("id"))->result();
    //Then serve the file
    header("Content-type: image/jpeg");
    readfile($file->path);
}
编辑:

我将尝试用其他术语解释:

  • 创建一个名为
    file
    的上传文件表。差不多

    创建表文件(id INT NOT NULL自动递增,path VARCHAR(100)NOT NULL,主键(id))

  • 更新您的
    person
    表,使其不再具有
    文档路径
    ,而是具有
    文件id
    。上传文件时,将其路径保存在表
    文件
    中,然后将文件id分配给此人(当然是在表person中)

  • 你需要做的不是
    ,而是

  • 这是因为我们希望用户转到您需要创建
    File.php
    (控制器)的特定控制器

  • 在这个控制器中,函数索引(控制器文件的默认函数)必须执行我在编辑之前向您展示的操作。这意味着您从数据库中检索基于文件id的文件路径,然后提供文件。这称为PHP服务,而不是Apache(默认)文件服务


  • 哪一部分你不知道怎么做?谢谢我会尝试这样做:)@BabyAzerty一旦用户获得文件,是否可以看到路径(开发者控制台)然后直接链接?
    function index() {
        //Check if logged in
        if (!$user->logged()) {
            redirect('/404');
        }
        //Get file from database
        $file = $this->db->query('SELECT * FROM file WHERE id='.$this->input->get("id"))->result();
        //Then serve the file
        header("Content-type: image/jpeg");
        readfile($file->path);
    }