jQueryを使って、フォームとは非同期に画像をアップすることにした。
その際に画像のパスを取得して、データベースに送るようする。
なので、データベースには画像を格納できないが、今回はこれでいこう。
もっとCakePHPの経験値が上がれば、もっといい方法が思いつくかな。
こちらのプラグインがシンプルで、これからやろうとしていることに合っているので、組み込ませて貰うことにした。
ただし、このままでは不十分なので、色々工夫しないと。
1.サーバーサイドのPHPは、CakPHPのコントローラー内に実装。
まずは上記プラグインの組み込みから。
CakePHPなので、ファイル一個つくってアップでおしまい、って訳にはいかない。
コントローラー内に組み込んで、動作確認も取れた。
2.mime typeのチェック。
画像以外のモノを上げて欲しくないので、チェック。
mime_content_typeが非推奨になっているため、Fileinfo関数を使うことにする。
利用しているサーバーのPHPのバージョンがデフォルトで5.2だが、5.3以上でないとFileinfo関数が標準装備でないらしい。
レンサバのマニュアルを読んでたら、.htaccessで5.3として動作可能なので、さっそくアップ。
Fileinfo関数が無事動作した。
この後もサイズチェックや画像のリサイズなどが必要。
さらにはアップされっぱなしの不要画像の処理か。
これはcronで何とかするかな。
やっぱり自前だと時間がかかるなあ・・・。
追記
上述のjQueryプラグインで、PHP側の記述を一部変更。
アップしたファイル名を取得する際に、
$filename = basename($_FILES['yourkey']['name']);
と処理をしているが、ファイル名に日本語が含まれている場合、ファイル名が消えてしまう。
次のように書き換えました。
$filename = end(split('/', $_FILES['yourkey']['name']));