2011-08-17 12 views
2

私は各投稿に特集画像付きのブログを作成しています。私はジレンマがある、私は私の画像データで何をすべきか分からない...PHP&MYSQL - 画像データはどうすればいいですか?

BLOBを使用してMYSQLデータベースに画像データを挿入する必要がありますか?

また、ユーザーの画像フォルダにディレクトリを作成し、そのように写真をアップロードするアップローダを作成する必要があります...ブログ投稿を追加するときに画像フィールドで直接参照するだけですか?

標準化された方法はありますか?

敬具、 アダム

答えて

3

は、サーバーにファイルをアップロードして、データベース内のファイルの位置を保存します。あなたのDBとあなたのHTTPデーモンにかかる負荷が軽減され、MySQLよりイメージを提供する方が優れています。

0

一般的なアプローチは、なぜあなたがそこに格納する必要があるのか​​分からない限り、DBにファイルを格納することではありません。したがって、あなたがわからないので、アップロードフォルダに保存するほうがずっと簡単です。

しかし、DBにファイルを保存する必要がある場合は、BLOBフィールドを宣言して、BLOBをサポートするDBメカニズムを使用して保存する必要があります。 'PHP's MySQLi extension: Storing and retrieving blobs'は、その作成方法の良い例です。

0

は、base64に画像データを変換します。これは、PHP内で実行することができます:DB内の画像を保存する

<? $image=file_get_contents("image.png"); $image=base64_encode($image); ?>

は、安全なイメージのための良いアイデアです。

0

常に画像ファイル、音楽ファイルなどをディスク上のシステムファイルに保存し、それらのURLをデータベースに保存します。つまり、

1)速く

2)いずれかの方法で

3)優れたセキュリティ設定を構成しやすい私は

はデメリット
ファイルシステムがあなたを破損している場合は想像することができるようになります回復するのに苦労するでしょう。

また、サードパーティの画像ホスティングサイトを使用することもできます。Amazon S3またはMosso Cloud Filesを使用できます。

ファイルシステムの問題は、拡大縮小が難しいことです。

Facebookはcassandraを使用して画像を保存します。

ブログなので、イメージをファイルシステムに保存できます。

0

どちらも有効なアプローチです。

これらはそれぞれ長所と短所があります。

データベースに格納するということは、イメージをINSERT/UPDATEステートメント内に収まる表現に変更するための追加コードを追加する必要があることを意味します(base64は1つのアプローチであり、同等のデコードが必要ですが、mysql_real_escape_string ))。イメージを直接照会することはできませんが(完全一致の検索以外)、データベースのパスを検索してからファイルを取得する場合と比較して、データの取得に必要なシークおよびI/O操作の数が減る可能性があります。

複数のノードで実行する場合、データベースとファイルシステムの複製を設定するのと比べて、データベースの複製をセットアップする方がずっと簡単です。そして、ファイルシステムとデータベースのバックアップを同期させておくという問題があります。

OTOHを使用すると、ファイルシステムを使用するとデータテーブルが大幅に小さくなり、レコードを取得する時間が短縮されます。あなたは確かにユーザーが直接ウェブサーバのドキュメントツリーにコンテンツをアップロードできるようにしたくないユーザーが画像フォルダ

へのディレクトリになり

- に関係なく、あなたが取るどのルートのを、データはずですウェブサーバーが直接アクセスできない場所に保存することはできますが、コードでアクセスできます。

関連する問題