Php Codeigniter:保护文件夹不被直接访问
大家好,我有一个与数据库连接的小项目。我拥有一个 将文件上载到文件夹,并将文件保存到数据库的路径。 在我的索引页面中,我从数据库中读取文件路径,并输出一个表,其中包含指向这些文件的链接,以便下载。 一切正常,文件可以下载,除非, 问题是我忘了保护这个文件夹,昨天意识到我应该以某种方式保护它,因为人们可以通过链接直接下载文件 我需要检查用户是否已登录才能下载它 所以我的问题是: 如何保护包含这些文件的文件夹,使其不被直接访问,并使其仅成为已登录用户 要能够从此文件夹下载文件,请执行以下操作: 我的上传路径是./uploads/在这个文件夹中,我有一个htaccess文件Php Codeigniter:保护文件夹不被直接访问,php,codeigniter,Php,Codeigniter,大家好,我有一个与数据库连接的小项目。我拥有一个 将文件上载到文件夹,并将文件保存到数据库的路径。 在我的索引页面中,我从数据库中读取文件路径,并输出一个表,其中包含指向这些文件的链接,以便下载。 一切正常,文件可以下载,除非, 问题是我忘了保护这个文件夹,昨天意识到我应该以某种方式保护它,因为人们可以通过链接直接下载文件 我需要检查用户是否已登录才能下载它 所以我的问题是: 如何保护包含这些文件的文件夹,使其不被直接访问,并使其仅成为已登录用户 要能够从此文件夹下载文件,请执行以下操作: 我的
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
(控制器)的特定控制器哪一部分你不知道怎么做?谢谢我会尝试这样做:)@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);
}