CakePHP UploadPackプラグインのディレクトリ分散
CakePHP UploadPackプラグインのディレクトリ分散がしたい!
最後にちらっと
一度画像を登録してから最後に自分のオリジナルのディレクトリにファイルを移動させるようなことを処理として行っています。(今回はUploadPackの解説なので、それはまた次の機会に。)
と言ってしばらく放置していたら、UploadPackでアップロードしたファイルのフォルダ分散についてやはり質問を頂きましたので解説します。
ただ、やっていることは非常にシンプルで、
ファイルのアップロード自体はUploadPackで行い、最後に自分の指定した保存先に移動する
ただそれだけなんですよ。
CakePHP UploadPackの唯一の問題点
ITかあさんがCakePHPでCMSを開発する際には、もう無くてはならないプラグインになっているUploadPackなんですが、唯一問題なのは
デフォルトの仕様ではアップロードファイルが一か所に溜まりすぎる
と、いうことなんです。
CakePHP UploadPackのpathのおさらい
UploadPackでアップロードしたファイルの保存先はModelに指定しますね。
var $actsAs = array( 'UploadPack.Upload' => array( 'img' => array( 'path' => ':webroot/img/:id/:style.:extension', 'styles' => array( 'big' => '200x200', 'small' => '120x120', 'thumb' => '80x80', ) ) ) );
すると、ファイルの保存は1アップロードにつき、1フォルダ。スタイルごとのファイルも同じフォルダに保存されます。
これ、マスター管理者しかアップロードしないケースならそれほど気にならないですが、ユーザーが自由にどんどんアップロードするプログラムなら、3000回アップロードされたら3000フォルダも作られてしまいます。
長く運用するなら、デフォルトのままではちょっと無理があると思います。1つのディレクトリにたくさんファイルやフォルダがあるのはちょっとした重さの原因になったり、管理上もよろしくないです。
たくさんファイルをアップロードするプログラムのフォルダ分散の基本
登録したidを指定した桁数までゼロ埋めして、さらに2桁、3桁くらいでフォルダ分散させます。今回は8桁でやってみます。
$cont_id = sprintf("%08d", $id); $dir1 = substr($cont_id, 0, 2); //0埋めしたIDをスライスして、一定のファイルごとにディレクトリ分散 $dir2 = substr($cont_id, 2, 3); //一応これで、99999999以上は余裕でいけます。 $file = '/home/example.com/public_html/app/webroot/img/banner/'.$dir1.'/'.$dir2.'/'.$cont_id;
フォルダをちゃんと分散させたほうがいいんだな、ということを頭に入れて、CakePHP UploadPackプラグインで実際にファイルをイイ感じに分散したいと思います。
ページ: 1 2