1. ホーム
  2. php

[解決済み] 写真のアップロードや保存はどのようにすればよいですか?

2023-08-06 05:34:45

質問

大きなウェブサイトがどのように写真をサーバーに保存しているのか、私にはわかりません。どなたか、ユーザーによってアップロードされた写真をどのようにデータベースに保存しているのか教えていただけないでしょうか。

私は、多分彼らはただファイル(写真)をあるパスに保存し、そのパスをデータベースに保存するのだろうと考えていたのですが、それは正しいのでしょうか?

しかし、私はこの方法で行いたいのです。これは正しいのでしょうか?例えば、あるウェブサイトが www.photos.com . ユーザーが写真をアップロードするとき、私はユーザー名のフォルダを作成し、そのフォルダにそれらの写真を保存します。

を使ってディレクトリを作成することができると思います。 php file concepts . ですから、新しいユーザが写真やファイルをアップロードしたときに、そのユーザの名前でディレクトリを作成したいのです。

例: ユーザー名がjohnの場合、photos.comに次のようなディレクトリを作成します。 www.photos.com/john/ というディレクトリを作成し、彼が写真をアップロードしたときに、すべての写真をこのディレクトリに保存します。 これは正しい方法なのでしょうか?

サーバーにファイルを保存する良い知識を持つ人がここにいないので、これを行う方法を教えてください。私はそれを正しく安全な方法で行いたいのです。

どのように解決するのですか?

すべてのビッグサイト は、データベースに画像を保存しない ディスクに保存しています。 彼らは、テーブル内の画像の位置への参照を保存します。そして、そこからリンクします。

なぜですか?パフォーマンスです。

データベースから重いコンテンツを引っ張ってくるのは、パフォーマンスの大きなボトルネックになります。そして、データベースはそれほど水平にスケールしないので、さらに大きな問題を意味することになります。すべてのビッグ サイトは、画像などの静的コンテンツを扱うために静的コンテンツ ファームを使用しています。それは、あなたのアイデンティティを気にしないサーバーです。

どうやって写真を本当に非公開にするのか、と聞かれるかもしれません。そうではありません。

写真のリンクは、それ自体がアドレスであり、パスワードなのです。たとえば、Facebookを考えてみましょう。もし私が自分のアカウントにプライベートな写真を保存したら、あなたはそれを開くことができないはずです。しかし、正しいアドレスを持っている限り、あなたは開くことができます。

この画像はプライベートです . ファイル名に注意

10400121_87110566301_7482172_n.jpg

(facebookは時々URLを変更するので、リンクが切れている可能性があります)

ノンシーケンシャルです。画像を取得する唯一の方法は、そのアドレスを知っていることです。

前のユーザーの写真を元に、次の写真を推測することはできません。

1枚の写真から推測が不可能。

編集 (なぜ画像を "ユーザー名" フォルダに保存してはいけないのか。

あなたの編集の後、あなたがデータベース上ではなくディスク上にファイルを置くことを意図していることが明らかになりました。この編集は、新しいシナリオをカバーします。

あなたのロジック (ユーザーごとにフォルダーを作成) がより整理されているように見えても、多くのユーザーと多くの画像を持ち始めると問題が発生します。サーバーに 1T のディスク容量があると想像してください。また、1T はサーバーが処理できる負荷で多かれ少なかれ正確であると想像してください。

今、11 人のユーザーがいて、彼らが同時にアップロードを開始し、それぞれが 100GB 以上のファイルをアップロードすると仮定します。それぞれが 91GB に達すると、サーバーは満杯になり、別のサーバーに画像を保存し始めなければなりません。このようなユーザー/フォルダ構造であれば、ユーザーの1人を選択して、彼のデータをすべて別のサーバーに移行する必要があります。また、1T以上のファイルをアップロードできないユーザーにはハードリミットがかかります。

では、すべてのファイルを同じフォルダに保存すればよいのでしょうか。

いいえ、ビッグサイトでは一般に、1つのフォルダにX個の定義された数のファイルを持つシーケンシャルフォルダ(/000001/, /000002/など)にファイルを格納します。これは、主にファイル システムのパフォーマンス問題のためです。

さらに詳しく ディレクトリ内のファイルはいくつあっても足りないのでは?