0

ユーザーが自分の画像をアップロードできる出会い系サイトを作成しています。一部はプライベートで一部はパブリックです。

私が計画したのは、アップロードされたすべての画像を保存することです。それらを表示したい場合は、それらを呼び出すスクリプトを作成します。

例: 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);
}

しかし、サイトが大きくなっているのを確認した後、各ユーザー イメージ リクエストがすべてのアプリケーション ファイルをロードしていることに気付き、おそらくサイトの速度が低下します。

プライベート画像を保存する方法を知っていますか(ユーザーのいくつかのチェックの後にのみ、URLで公開されません)

4

1 に答える 1

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://site.com/private-photo/113.jpg などのすべての http リクエストはprivate_photo.phpにリダイレクトされます。

最後のステップは次のとおりです: から画像の ID を取得する private_photo.php を作成し$_GET["id"]、セキュリティ チェックを行いfopen/fpassthruます。

于 2013-02-02T21:31:00.097 に答える