dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

kohanaのテスト12・・・画像データをデータベースに保管する

 kohana のテスト12の続きで、画像データのアップロードを検討しています。WordPress のコードを読んでみると極めて複雑な処理になっていて、読むのがいやになりました。たかだかファイルをアップロードして、チェックして、サムネールを作って、情報をデータベースに記録する程度の処理なのに、不思議です。

 一番気に入らないのは画像ファイルをフォルダーに保管していることです。ここはやはりデータベースに保管したいということで、画像データのアップロード処理は独自路線で書いてみることにしました。

 

SQL 文の最大サイズを変更する

 先ずやらなくてはいけないのが、MySQL の設定です。画像データも SQL 文に書き込んで処理をするわけですが、SQL 文は最大サイズが規定されています。デフォルトでは 1M バイトになっていました。最近のデジイチの画像は JPEG でも 10MB くらいありますから、デフォルトは小さ過ぎます。これに気付くまで、2日くらい調査・試行錯誤してしまいました。おかげであれこれ勉強にはなりましたけど・・・(^^;;;

 C:\xampp\mysql\bin\my.ini に max_allowed_packet の設定があります。この値を少し余裕を持って 20M にしてみました。

 

画像データをデータベースに保管する

 画像データはバイナリなので、データベースには MEDIUMBLOB 型のカラムを準備します。画像データを SQL 文に書き込む方法は 2通りあります。

<方法1>

$img = mysql_real_escape_string(file_get_contents($file_path));

 SQL 文中ではクォート (') で囲まれるように記述します。ここでは MySQL に対するエスケープ処理を入れていますが、kohana の DB のメソッド使う場合は kohana が処理してくれるのでこの関数は使いません。

<方法2>

$img = '0x'.bin2hex(file_get_contents($file_path));

 SQL 文中ではクオートで囲まれないように記述します。この方法ですと、SQL をダンプした時に文字化けを見ずに済みます。kohana のDB メソッドを使うとクオートで囲んでしまうので、この方法は使いません。kohana の DB メソッドでも SQL 文を直接書いて食わせる方法がありますけど、無理に使うメリットはありません。

 

 今日はここまでです。写真を MySQL に登録するところまでは出来たので、次回からテスト12 のコードの続きを書いていきます。