2

データベースには多くのレコードがあり、各レコードには画像があります。画像を保存する方法についてかなり混乱しています。

/img/record-id.jpgアクセスルートを(つまり)のようにしたい/img/15178.jpg

すべての画像を /img/ 内に保存するのは良くありません。

この質問では、画像の名前を逆にすることが提案されているため、上記の例は に保存され/img/78/51/15178.jpgます。この提案は、他のシナリオに関する詳細情報を提供しません (私にとっては明らかではありません)。ID が 5、15、128、1517 のような小さい数字の場合はどうなりますか (これは最後のコメントで回答を求められます)。

それはさておき、パスを にしたいことを思い出しましょう/img/15178.jpg。Apache を使用してリクエストをリダイレクトしますが、そのためには、異なる ID 番号に対して少なくとも 3 つ以上のルールを入力する必要があります。

  • ^/img/(\d)(\.jpg)$/img/$1$2
  • ^/img/(\d\d)(\.jpg)$/img/$1/$1$2
  • ^/img/(\d\d)(\d\d)(\.jpg)$/img/$1/$2/$3
  • 等々?

これはうまく機能しますが、良い解決策ではないようです。

イメージの MD5 を取得し、それぞれのレコードに保存し、リクエストを PHP スクリプトにリダイレクトして、出力を処理させるという他のオプションを考えることができます。

スクリプトは、データベース内の ID の MD5 を検索し、ハッシュから実際のルートを構築し、画像を出力します。このソリューションはより優れていますが、データベースと PHP を使用して画像を出力するため、少し多すぎるように思えます。

ここで何をすべきか本当にわかりません。アドバイスをいただけませんか?

4

1 に答える 1

2

あなたはすでに完璧な答えを書いています!専門家は、あなた (またはリンクされた質問の人) が言うようにそれを使用します: あなたのニーズに合った深いディレクトリ構造を構築します。私はこれを 1600 万枚の写真で行いましたが、完璧に機能しました。

私はこのようにしました:

/最初の文字/2番目の文字/...

5.jpg のような短い名前のファイルは、/5/5.jpg になります。

編集: パフォーマンスを維持するために、salt、md5 などの追加の php アクションには完全に反対しています。ストレートでシンプルにしてください。

于 2012-05-17T15:03:03.047 に答える