[FuelPHP] アップロードしたファイルのバリデーションをする方法
アップロードされたファイルをチェックしたかったので…。
背景
DB へインサートした後に得られるシーケンス番号をファイル名にしたい。この時に入力値が不正だとインサート処理が上手く実行できず、シーケンス番号が取得できない。また、選択されたファイルが不正だった場合は、DB へのインサート処理をロールバックしなければならない。
このような無駄な処理を未然に防ぐには、入力値とファイルのチェックを行った後に DB 処理をするのが好ましい。(当社比)
(アップロード時に発生したエラーはしょうがないので、あとでどうにかする)
ファイルのバリデーション
アップロード処理後にエラーがあればそれを返却したりするのだが、今回はアップロードの処理は行わず、エラーメッセージのみ取得しておく。Upload クラスを使う。Upload::save()
などは使わずにUpload::get_errors()
でエラーを見てみる。
public static function validate_image() {
$message = '';
try {
Upload::process(array(
'max_size' => 2097152,
'randomize' => false,
'normalize' => true,
'overwrite' => true,
'auto_rename' => false,
'ext_whitelist' => array(
'jpg',
'jpeg',
'gif',
'png'
),
));
// 検証
foreach( Upload::get_errors() as $file ) {
// ファイルをアップロードしていない場合
if( $file['name'] == '' && $file['type'] == '' && $file['size'] == 0 ) {
$message = 'ファイルを選択してください';
} else {
foreach( $file['errors'] as $error ) {
$message = $error['message'];
}
}
}
} catch(Exception $e) {
$message = $e->getMessage();
}
return $message;
}
戻り値にメッセージが入ってると引っかかってるような感じ。
ざっくりとした作りなので実運用の時はきちんとエラーハンドリングとかしよう。