[解決済み] 写真のアップロードや保存はどのようにすればよいですか?
質問
大きなウェブサイトがどのように写真をサーバーに保存しているのか、私にはわかりません。どなたか、ユーザーによってアップロードされた写真をどのようにデータベースに保存しているのか教えていただけないでしょうか。
私は、多分彼らはただファイル(写真)をあるパスに保存し、そのパスをデータベースに保存するのだろうと考えていたのですが、それは正しいのでしょうか?
しかし、私はこの方法で行いたいのです。これは正しいのでしょうか?例えば、あるウェブサイトが
www.photos.com
. ユーザーが写真をアップロードするとき、私はユーザー名のフォルダを作成し、そのフォルダにそれらの写真を保存します。
を使ってディレクトリを作成することができると思います。
php file concepts
. ですから、新しいユーザが写真やファイルをアップロードしたときに、そのユーザの名前でディレクトリを作成したいのです。
例: ユーザー名がjohnの場合、photos.comに次のようなディレクトリを作成します。
www.photos.com/john/
というディレクトリを作成し、彼が写真をアップロードしたときに、すべての写真をこのディレクトリに保存します。 これは正しい方法なのでしょうか?
サーバーにファイルを保存する良い知識を持つ人がここにいないので、これを行う方法を教えてください。私はそれを正しく安全な方法で行いたいのです。
どのように解決するのですか?
すべてのビッグサイト は、データベースに画像を保存しない ディスクに保存しています。 彼らは、テーブル内の画像の位置への参照を保存します。そして、そこからリンクします。
なぜですか?パフォーマンスです。
データベースから重いコンテンツを引っ張ってくるのは、パフォーマンスの大きなボトルネックになります。そして、データベースはそれほど水平にスケールしないので、さらに大きな問題を意味することになります。すべてのビッグ サイトは、画像などの静的コンテンツを扱うために静的コンテンツ ファームを使用しています。それは、あなたのアイデンティティを気にしないサーバーです。
どうやって写真を本当に非公開にするのか、と聞かれるかもしれません。そうではありません。
写真のリンクは、それ自体がアドレスであり、パスワードなのです。たとえば、Facebookを考えてみましょう。もし私が自分のアカウントにプライベートな写真を保存したら、あなたはそれを開くことができないはずです。しかし、正しいアドレスを持っている限り、あなたは開くことができます。
この画像はプライベートです
.
ファイル名に注意
10400121_87110566301_7482172_n.jpg
(facebookは時々URLを変更するので、リンクが切れている可能性があります)
ノンシーケンシャルです。画像を取得する唯一の方法は、そのアドレスを知っていることです。
前のユーザーの写真を元に、次の写真を推測することはできません。
編集 (なぜ画像を "ユーザー名" フォルダに保存してはいけないのか。
あなたの編集の後、あなたがデータベース上ではなくディスク上にファイルを置くことを意図していることが明らかになりました。この編集は、新しいシナリオをカバーします。
あなたのロジック (ユーザーごとにフォルダーを作成) がより整理されているように見えても、多くのユーザーと多くの画像を持ち始めると問題が発生します。サーバーに 1T のディスク容量があると想像してください。また、1T はサーバーが処理できる負荷で多かれ少なかれ正確であると想像してください。
今、11 人のユーザーがいて、彼らが同時にアップロードを開始し、それぞれが 100GB 以上のファイルをアップロードすると仮定します。それぞれが 91GB に達すると、サーバーは満杯になり、別のサーバーに画像を保存し始めなければなりません。このようなユーザー/フォルダ構造であれば、ユーザーの1人を選択して、彼のデータをすべて別のサーバーに移行する必要があります。また、1T以上のファイルをアップロードできないユーザーにはハードリミットがかかります。
では、すべてのファイルを同じフォルダに保存すればよいのでしょうか。
いいえ、ビッグサイトでは一般に、1つのフォルダにX個の定義された数のファイルを持つシーケンシャルフォルダ(/000001/, /000002/など)にファイルを格納します。これは、主にファイル システムのパフォーマンス問題のためです。
さらに詳しく ディレクトリ内のファイルはいくつあっても足りないのでは?
関連
-
[解決済み] 整形されていない数値が発生しました。
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み] ずっとUTF-8
-
[解決済み] Long-Polling、Websocket、Server-Sent Events (SSE)、Cometとは何ですか?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] クエリ文字列の中で配列を渡すには?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】PHPパスワードのハッシュとソルトの安全性について
-
[解決済み】「ログインしたままにする」 - 最適な方法とは?
-
[解決済み】<input type='file'> の変更時に選択されたファイルのフルパスを取得するには、javascript、jquery-ajaxを使用するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】phpのob_start()の使い道は?
-
[解決済み] 整形されていない数値が発生しました。
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: バインドされた変数の数が102行目のトークンの数と一致しない [終了]
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み] Uncaught SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
MacでPHPを実行した際に、メモリサイズが134217728バイトも消費される問題の解決方法について
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。
-
[解決済み] 1つのディレクトリにいくつまでファイルを置くことができますか?