php codeigniter如何使用控制器限制对目录中文件的访问

时间:2011-11-05 20:16:42

标签: php .htaccess codeigniter directory

我想跟进a question我之前曾问过哪些我仍然无法回答。

总而言之,www.mysite.com/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”子-directory。

但是,此代码显然没有做任何事情,因为如果有任何人只有account_id = 3的用户转到www.mysite.com/uploads/3/2/my_video.m4v,他们仍然可以访问此视频(已下载)通过Firefox,safari,以及由Chrome本地播放。

非常感谢任何人的想法!

1 个答案:

答案 0 :(得分:0)

您需要使用.htaccess文件限制直接访问。

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