質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

3回答

2979閲覧

ユーザーが投稿した画像を皆さんはどうやって管理されてますか?

bushi

総合スコア44

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

2クリップ

投稿2014/11/10 11:37

皆さんはどのようにユーザーが投稿した画像を管理されてますか?
できればDBではなくディクトリ管理での意見が聞きたいです。

自分はよくQmailのように0番フォルダから始まり例えば3000個の画像がたまったら、1番のフォルダを作りという感じで作っています。

ただ、今回コミュニティサービスなのでどのように管理したらよいかなーと。
WPのように年フォルダ/月フォルダ/日フォルダ
のような仕組みがいいのか。

ご意見よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

コミュニティサービスとありますので、そのあたりを考慮し、私が設計するならば、、、

他のユーザとの絡みのないページでのアップロードの場合は、
/uploads/Users/<User ID>/<Hash>.(png|jpg)

  • User ID: ユーザ毎に採番されたID値
  • Hash: 画像ファイルからsha256等で取得したHash値

他のユーザとの絡みのあるページの場合(例えばグループ掲示板など)は、
/uploads/<Function ID>/<Thread ID>/<User ID>/<Hash>.(png|jpg)

  • Function ID: 機能単位に採番したID値(グループ掲示板ならグループ掲示板としてIDを一つ振る)
  • Thread ID: 例の掲示板ならばスレッド毎に裁判したID値
  • User ID: ユーザ毎に採番されたID値
  • Hash: 画像ファイルからsha256等で取得したHash値

と、なるべく小分けにします。
上記例のUser IDやThread IDも5桁を超えるのであれば、1000単位(最大でも2000〜5000くらい)毎にサブディレクトリを作成したほうが良いですね。

考えるべきは、

  • 一つのディレクトリ配下のファイル数はなるべく最小になるようにする。
  • 機能単位/ユーザ単位で探しやすい構成にする。

の2点を考慮しておけば、まとめて削除も、単一ファイルの削除も楽なんじゃないかと。

また、ご自身の記載にあるような、WPでの日付によるディレクトリ構造の選択は要件次第で選択しても良いかと。
要は日付単位でファイル操作の有り/無しという要件次第で。

投稿2014/11/11 06:18

hiro32

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bushi

2014/11/11 06:30

hiro32さん コメントありがとうございます。 凄く参考になりました。 >他のユーザとの絡みのあるページの場合(例えばグループ掲示板など)は、 >/uploads/<Function ID>/<Thread ID>/<User ID>/<Hash>.(png|jpg) こちらの考えを採用させていただきます。 私もこの記事を書いた後に「さて、どうやって管理するか」を考えていた所、 こちらとほぼ一緒で考えておりました。 ※私の場合はUserIDは入れてなかったので「なるほど~」と思いました。 > 一つのディレクトリ配下のファイル数はなるべく最小になるようにする。 > 機能単位/ユーザ単位で探しやすい構成にする。 凄く勉強になります。ありがとうございます。 ベストアンサーとさせていただきます!
guest

0

すでに回答にあるように、ディレクトリ直下の項目を少なくすると言う意図では、こんなのもあります。
Perlモジュールが置かれているCPANではAuthorのIDをばらして分けているようです。

IDの先頭1文字のディレクトリ / IDの先頭2文字のディレクトリ / IDのディレクトリ

こんな感じです。この方式をなんと呼ぶのかは知りませんが、何かの参考になれば。

投稿2014/11/11 06:40

TaMaMhyu

総合スコア1356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bushi

2014/11/11 06:51

TaMaMhyuさん コメントありがとうございます。 >Perlモジュールが置かれているCPANではAuthorのIDをばらして分けているようです。 なるほど、CPANで採用されいるとなるとかなり説得力がありますね。 >IDの先頭1文字のディレクトリ / IDの先頭2文字のディレクトリ / IDのディレクトリ なるほど、このような考えもあるんですね。 すごく勉強にもなり、今後の開発に活かせれるかもしれません。 PHPではない他の言語からの意見は凄く興味があり嬉しく思っております。 ありがとうございます。
guest

0

開発に使用する言語やフレームワークによって変わりますが、

/uploads/[モデル名]/ハッシュ値.png
のようにモデル(テーブル)単位にすることが多い気がします。

例えば、ブログのPostモデル(postsテーブル)があった場合
/uploads/posts/4c286e182bc4d1832a8739b18c19ecaf9262c37a.jpg
のような感じです。

Ruby on Railsを使った場合はファイルアップロードにはCarrierWave(たまにPaperclip)を使います。
このときは、ディレクトリ構造はほぼデフォルトの設定で使っています。

投稿2014/11/11 04:39

tmu

総合スコア277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bushi

2014/11/11 06:40

tmuさん コメントありがとうございます。 >/uploads/[モデル名]/ハッシュ値.png >のようにモデル(テーブル)単位にすることが多い気がします。 なるほど、モデル単位とは考えたことがなかったので「なるほど!」と思いました。 また新しいファイル管理方法知ることが出来ました。 >Ruby on Railsを使った場合はファイルアップロードにはCarrierWave(たまにPaperclip)を使います。 >このときは、ディレクトリ構造はほぼデフォルトの設定で使っています。 なるほど、Railsは扱ったことがないので、「CarrierWave」をぐぐってみました。 これはかなり便利そうですね。 今回は言語問わずいろんな方の意見が聞きたかったのでまさにこのような解答が欲しかったです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問