1

画像をアップロードし、名前をランダムなハッシュに変更し、ハッシュに基づいてフォルダーを作成し、最後に作成されたフォルダーに元の画像を保存し、最後に 2 つの他のサムネイルを作成する php スクリプトがあります...

通常の画像...images/a3c/65c/297/108_a3c65c2974270fd093ee8a9bf8ae7d0b.jpg

サムネイル画像...images/a3c/65c/297/108_a3c65c2974270fd093ee8a9bf8ae7d0b_t.jpg

小さいサムネイル...images/a3c/65c/297/108_a3c65c2974270fd093ee8a9bf8ae7d0b_sm.jpg

アップロードされた写真ごとに、写真 ID とこの情報を含む新しいレコードが DB に保存されます。

/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';

}

基本的に、写真のURLがこのように見えるTwitterのようなことをしたい

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

質問...

  1. このタイプの URL 構造を実現するにはどうすればよいですか? アクセス?
  2. 画像を正しい方法で返していますか?
  3. 私がしていることは、安全で、スマートで、良い習慣ですか? そうでない場合、より良い方法はありますか?

ありがとう!!

4

1 に答える 1

1

IMO、確かにURLの書き換えで間違いなくそれを行うことができます。/etc/apache2/sites-available/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?

それはどういう意味ですか?あなたの「リターン」は機能します。ただし、ifs の代わりに switch/case ステートメントを使用していたでしょう。

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

安全 : 入力をエスケープする必要があります。ただし、画像名が英数字の場合のみリダイレクトする場合は問題ありません

なぜそんなに多くのディレクトリに分割するのかわかりません。画像とサムネイルごとに 1 つのディレクトリで十分です。B ツリーなどを使用したインデックス作成について心配する必要はありません。データベースでのみインデックスを使用するだけで十分です。

大事なことを言い忘れましたが、ユーザーと画像の間のリンクが必要ない場合は、Apache の書き換えルールのみを使用してそれを達成します。

RewriteRule ^/profile_images/(\w+)(_\w+)?.(jpg|png)/ images/$1/$1$2.$3

php も db も関係なく、1 行で完了します。

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

参考になるかどうかはわかりませんが、何かを学んだかもしれません。そして少なくとも、あなたには別の視点があります:)

于 2012-09-17T13:23:46.827 に答える