ファイルをアップロードして、そこからcropするなりresizeするなりしておきたい場合がある。
fuelphpにはUploadクラスやImageクラスで簡単にそこら辺が使えて便利だったりはするけど、
なんかいちいちアップロードして一時的なフォルダにおいて、
そのファイルをごにょごにょして格納したいフォルダにおいて、
一時的なフォルダに逃がしておいたファイルを消すという作業は面倒なわけで。
ってことで今回はその面倒な過程を省略するんだけど、
その途中でエラーが出てしまう問題を解決する的なお話をば。
公式ドキュメントではこんな感じ。
で、これを正直に使ってしまうとなぜかこんなエラーが出てしまう。
RuntimeException [ Error ]:The library does not support this filetype for /tmp/phpcudWEa.
で色々と探ってみたところ言及しているツイートがあって、原因としてはこのImageクラスにあるらしい。
FuelPHPのImage(GDドライバ)はロード時の拡張子指定で形式を強制して開けるけど、persistece=>trueのconfig渡さない場合は出力後のリロードで形式指定忘れちゃうので、拡張子無しのファイル(アップロードされたtmpのとか)を変換して吐こうとしたとき死ぬ
— sji (@sji_ch) 2014, 2月 24
ということから察すると/tmp/****のような一時的な拡張子無しファイルはImageクラスでは通常読み込めないという感じじゃないんかと。
ってことでツイートに書かれているようにとあるconfigを記載してあげるとうまくいく。
ただしpersistece=>trueとなってるが正しくはpersistence=>trueであるけど。
ってことで正しい書き方はこんな感じになる。
// 画像を読み込む Image::load('filename.gif'); // 画像をアップロードし、Image::load メソッドへ直接渡す Upload::process(array( 'path' => DOCROOT.DS.'files' )); if (Upload::is_valid()) { $data = Upload::get_files(0); // アップロードデータのファイルを使い、 // $force_extension として画像の拡張子を強制することができる。 Image::forge(array("persistence" => true))->load($data['file'], false, $data['extension']) ->crop_resize(200, 200) ->save('image'); }ってことでこんな感じでやってあげれば無事に解決出来るという。
公式ドキュメントに書かれている内容通りにやってNGってなるのが地味にきついなぁという感じではあった的な。
0 件のコメント:
コメントを投稿