2011-12-02 12 views
0

データベースに画像データを格納する必要があります。私はサーバーに画像をアップロードしていますが、もちろんデータベースから画像を取得する必要があります。データベースでは、実際のファイルをファイルシステムに残すだけのデータを保存する必要があるので、どのデータセットを保存するのが最適な方法かを考えようとしています。Codeigniter:画像データをデータベースに格納するための推奨手法

ほとんどの場合、ネーミングスキームを選択するのが面倒です。データベースには、filenameという列があります。ここには、ファイル名と拡張子だけを格納する場所があります。パスがないので、アプリケーションで設定することができます。それでは、ファイル名には何を使用しますか?私は意味のある名前をつけたいので、写真のタイトル、または少なくともその一部を保管することは涼しいでしょう。しかし、どれが一番良いアプローチであるかを確認するためには?

私はCodeigniterに文字列ヘルパーがあることを知っていますが、私はphp関数uniqidの使用についても読んでいます。それから私は絵の名前にIDを添付することができます。

あなたはどう思いますか?

+0

あなたの質問はcodeigniter特有のものですか?同様の質問はすでにサイト上で長い間答えられているので、尋ねるだけです。何も具体的でなければ、すでに回答を見つけることができます。 – hakre

+0

まあ、多分Codeigniterはこれに便利なライブラリ(私が言及した文字列ヘルパー)を持っていた可能性があります – Carlo

答えて

0

同じ名前の画像が2つあり、将来の問題が発生する可能性があるので、イメージの名前にハッシュを使用することをお勧めします。

もう1つのヒントとして、ファイルの内容をデータベースに保存したくない場合は、そのファイルへのパスを保存するだけのコストよりもはるかに高いです。

0

データベースに画像を保存することはお勧めできません。代わりに、データベースへの画像へのリンクを保存してください。 たとえば、 (..... "PNG"、 "JPG"、 "GIF")、次のフィールド

  • image_idは//画像の画像
  • のimage_type //タイプの一意のIDを持つテーブルを作成
  • 画像は、(データベースクエリに発注するための便利な)画像のアップロードの
  • アップロード日付//日付を置かれている場所
  • 画像リンク//パスは、

    をしたい

は、あなたが他のフィールドを追加することができますフォルダに

+0

私はそれがはっきりしていると思ったが、データベースにファイルを保存することは考えなかった – Carlo

+0

@Carlo my filename、それはmd5またはsha1またはuniqidでハッシュする必要がありますか? – MrFoh

+0

okですが、私はURLに写真の名前を表示する可能性を失うことになると思います – Carlo

1

何十万もありません(または高価なSCSIドライブの代金を払うだけでいいです:))、データベース全体を自由に保存してください。確信が持てない場合は、ファイルシステムも問題ありません。

イメージの一意のIDについては、おそらくDB挿入ID(一意保証、スレッド/クラッシュ/泣きなし)を使用するのが最善の方法です。

create table images (
    image_id int(20) primary key auto_increment, /* assumes mysql */ 
    file_path varchar(2500) not null, /* the actual file name and full path */ 
    file_label varchar(255), /** user's memorable name for the file */ 
    description varchar(2500), /** user provided description of contents */ 
    media_type varchar(100), /** something like image/jpeg; privided by php in upload */ 
); 

は、あなたはおそらく分類やタグのいくつかの並べ替え、USER_IDとimage_idはを接続したいと思う、など

:だからここにあなたがファイルシステム内の画像を保存しておきたいと仮定すると、良いアプローチですコメントの

EDIT

を追加しました:

あなたはいつもあなたが好きなら、あなたは、単にファイルシステム内の画像IDを保管していても、実際のファイル名を使用してリンクを構築することができます。そして、あなたは自分のPHPスクリプトに/画像/ DBを/リダイレクト

mysite.com/images/db/1234/picture_of_a_cat.jpg) 

:あなたは、この(1234画像IDおよび/画像です/ PHPスクリプトにリダイレクト)のような何かをするsearch friendly urlsを利用する必要があります。別の方法として、書き換えようとしない場合は、$ PATH_INFOを使うだけです。

たとえば、あなたがmysite.com/images/render.php/1234/picture_of_cat.jpg持っている場合:

<?php 
$parts = explode("/",$PATH_INFO); 
$image_id = $parts[3]; 
$image_from_db = null; //fetch the row from your dabatase here! 
header("Content-type: ".$image_from_db['media_type']); 
echo file_get_contents($image_from_db['file_path']); 

幸運を! ;)

+0

よく、あなたは正しいと思いますこのアプローチを使用すると、URLにファイル名を表示するときにランダムなIDが表示されますが、写真のタイトルを表示することもできます。 – Carlo

+0

あなたの助けてくれてありがとうございます。 codeigniterのルートを使って 'mysite.com/images/db/1234/picture_of_a_cat.jpg'のように – Carlo

関連する問題