PHP编码器如何使用控制器限制对目录中文件的访问


php codeigniter how to restrict access to files in a directory using the controller

我想继续问一个我之前问过的问题,但我仍然无法回答。

总而言之,www.mysite.com/uploads的目标是使"uploads"同时作为php控制器和目录。

关于在"uploads"控制器构造函数中编写一些身份验证的用户"匿名"给出的答案是我试图做的,但它还没有为我工作。

我通过名为"content"的控制器返回每个内容的详细信息,包括其src=""目录位置:

/content/account_id# (e.g., 3)/item_id# ((e.g., 2)

www.mysite.com/content/3/2视图文件中,我喜欢通过上述视频标签的src属性播放内容,例如视频文件。在本例中,src="/uploads/3/2/my_video.m4v" .

这是目前为止我的上载控制器代码:

class Uploads extends CI_Controller {
function Uploads()
{
  parent::__construct();
      $account_id= $this->session->userdata('account_id'); // =3 in this example
      $item_id=$this->uri->segment('3'); // =2 in this example
      $this->db->select('*');
      $this->db->from('items');
      $this->db->where('account_id, $account_id)->where('item_id, $item_id);
      $query=$this->db->get();
      if(empty($query){ return false; }
      else { return true; }
    }
 }

正如您可以从"items"表查询中看到的那样,我的目标是这样的场景,如果给定的account_id不拥有给定的item_id,那么它们就不能访问指定的"uploads"子目录。

然而,这段代码显然没有做任何事情,因为如果任何人,不是只是用户与account_id=3,去www.mysite.com/uploads/3/2/my_video.m4v,他们仍然可以访问这个视频(它是由Firefox, safari下载,并由chrome本地播放)。

任何想法都将非常感激!

你需要使用。htaccess文件来限制直接访问。

然后你必须在你的控制器中创建一个函数,在用户被授权后通过PHP流式传输文件