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 のコードの続きを書いていきます。