2012-09-17 38 views
1

我有一个PHP脚本上传图像,将其重命名为随机哈希,基于哈希创建文件夹,将原始图像存储在上次创建的文件夹中,最后为其创建2个其他缩略图...提供图像? htaccess重定向图像文件夹?

定期图像... images/a3c/65c/297/108_a3c65c2974270fd093ee8a9bf8ae7d0b.jpg

缩略图...... images/a3c/65c/297/108_a3c65c2974270fd093ee8a9bf8ae7d0b_t.jpg

小缩略图... images/a3c/65c/297/108_a3c65c2974270fd093ee8a9bf8ae7d0b_sm.jpg

对于上传的每张照片,它将存储在包含DB的新纪录照片ID而这个信息

/a3c/65c/297/108_a3c65c2974270fd093ee8a9bf8ae7d0b 

(注意如何我没有存放“.JPG”或‘_t.jpg’等)

现在,为了让我担任图像(我不知道这是否是一个好的做法),目前我有这个PHP函数,返回图像...

function get_image($image_id,$type = '') 
{ 
    $sql = "SELECT * FROM photos where photo_id = {$image_id}"; 
    $query = $this->db->query($sql); 
    $r = $query->row(); 

    $image = base_url().'images/'.$r->dir_1 . '/' . $r->dir_2 . '/' . $r->dir_3 . '/'.$image_id.'_'.$r->img_hash; 

    if($type == 'small') 
     return $image.'_sm.jpg'; 
    if($type == 'reg_thumb') 
     return $image.'_t.jpg'; 
    if($type == '' || $type == 'original') 
     return $image.'.jpg'; 

} 

基本上,我想要做的事,如Twitter,其中所述图片的URL看起来像这样

https://twimg0-a.akamaihd.net/profile_images/2392722244/blah.jpg 

问题...

  1. 我怎样才能实现这种类型的URL结构的? htaccess的?
  2. 我是否以正确的方式返回图像?
  3. 是我在做什么安全,聪明和良好的做法?如果不是有更好的方法吗?

谢谢!!

回答

1

国际海事组织, 你确实可以做到这一点,确实与URL重写。 在/ etc/apache2的/网站可用/ yoursite,

<Directory /> 

      RewriteEngine On 
      RewriteCond %{HTTP_REFERER}   profile_images/(\w+)/(\w+|.)+$ 


      RewriteRule ^/profile_images/(\w+)/   index.php?image_id=$1 [L,QSA] 

      Options Indexes FollowSymLinks MultiViews 
      AllowOverride None 

      Order allow,deny 
      allow from all 
    </Directory> 

尝试周围玩耍。我认为这是在htaccess非常类似的指令。

Am I returning the images the right way? 

你是什么意思?你的“回报”将起作用。我会用switch/case语句来代替ifs。

is what im doing safe, smart, and a good practice? if not is there a better method? 

安全:你应该逃避你的意见。但是,如果你只重定向的图像名称是一个字母数字它不应该是一个问题

我不知道你为什么分解成这么多的目录。每个图像一个目录+缩略图就足够了。不要担心用b-tree或类似的东西建立索引,仅在你的数据库中使用索引就足够了。

最后但并非最不重要的是,如果我不需要在用户和图像之间建立链接,那么我只会使用apache的重写规则来实现这一点。

重写规则^/profile_images /(\ w +)(_ \ w +)(JPG | PNG)?/图片/ $ 1/$ 1 $ 2,$ 3

它不涉及PHP的,也不是一个数据库,并完成在一行中。

https://serverfault.com/questions/214512/everything-you-ever-wanted-to-know-about-mod-rewrite-rules-but-were-afraid-to-as

http://httpd.apache.org/docs/current/mod/mod_rewrite.html

我不知道是否有帮助,但你可能已经学到了一些东西。至少,你有另一种观点:)

+0

谢谢你的答案,我忘了提及..我的目录数量的原因是由于我建立一个大型的web应用程序的事实...我们正在查看数百万张正在上传的照片,所以我需要将这些图像均匀分布。我会去做HTaccess,我会去改变这个功能来切换大小写。再次感谢!上面的htaccess的 – Kenny

+0

,我在哪里放?在网站的主要根目录或图像文件夹中?对不起,我没有htaccess – Kenny

+0

的技能它不工作..嗯 – Kenny