如何在网站中存储和管理用户的图像

时间:2013-02-02 21:05:32

标签: php image image-uploading image-upload

我正在创建一个约会网站,用户可以上传他们的图片, 一些私人和一些公众。

我打算做的是保存所有上传的图片,当我想要显示它们时,我会有一个会调用它们的脚本。

ie:url-> mysite.com/members/mainimage/5

处理此调用的函数是:     public function mainImage($ user){

    $this->load->model('tables/user_images_table');
    $image = $this->user_images_table->getMainUserImage($user);

    if($image != null ) {
        $imageExploded = explode('.',$image);

        switch( $imageExploded[1] ) {
            case "gif": $ctype="image/gif"; break;
            case "png": $ctype="image/png"; break;
            case "jpeg":
            case "jpg": $ctype="image/jpg"; break;
            default:
        }
        $imagePath = 'uploads/'.$image;
    } else {
        //default image
        $imagePath = 'inner/default.png';
        $ctype = 'image/png';
    }



    header('Content-type: '.$ctype);
    readfile(base_url()."images/".$imagePath);
}

但在我看到我的网站越来越大之后 我注意到每个用户图像请求我的所有appliaction文件都被加载了,这可能会减慢我的网站速度。

您是否知道如何保存私有图片(只有在对用户进行一些检查后才能通过网址公开)

1 个答案:

答案 0 :(得分:2)

将您的私有图片存储在某个文件夹中,同时将.htaccess放在这样的代码中:

deny from all

所以现在没有人可以通过http直接访问这些文件

然后在您网站的根目录中创建.htaccess并将这些行复制到那里:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^private-photo/([0-9]+)\.(jpg|jpeg|gif|png)$ private_photo.php?id=$1 [QSA,L]

所以现在所有http请求(例如http://site.com/private-photo/113.jpg)都会被重定向到private_photo.php

所以最后一步是:你创建private_photo.php,你从$_GET["id"]获取图像的id,进行安全检查 - 如果请求照片的用户有权访问它,然后{{1}图像或仅显示有关限制访问的错误