【问题标题】:how to store and manage user's images in a website如何在网站中存储和管理用户的图像
【发布时间】:2013-02-02 21:05:31
【问题描述】:

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

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

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

处理这个调用的函数是: 公共函数 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);
}

但是在我看到我的网站越来越大之后, 我注意到每个用户图像请求都会加载我的所有应用程序文件,这可能会降低我的网站速度。

你知道如何保存私人图像(不会通过 url 公开,只有在对用户进行一些检查之后)

【问题讨论】:

  • 例如 Facebook:它使用随机长名称的图像,您无法轻松预测模式。

标签: php image image-uploading image-upload


【解决方案1】:

将您的私人图像存储在某个文件夹中,也可以使用以下代码将.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://site.com/private-photo/113.jpg这样的http请求都将被重定向到private_photo.php

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

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2016-01-15
    • 2012-03-05
    • 1970-01-01
    • 2018-03-31
    • 2012-07-09
    相关资源
    最近更新 更多