アップロードされたファイルをどこまでバリデーションするか(PHP)
アップロードされたファイルをどこまでバリデーションするか(PHP)
概要
CakePHP1.3プロジェクト で、アップロードされたファイルを加工する必要があった。その際、アップロードされたものをどこまでバリデーションを行うか、が問題である。
ここが長すぎたら Controller
が肥大化し( ValidationClass
を作っても良いが)、
簡単なバリデーションだといつか痛い目にあう。
スクリプト
簡易的ではあるが、僕は以下のようにバリデーションを行う.
class AdminController { /** * アップロードファイル([].csv)を受け取る. * @return */ public upload_file() { // POST 以外は受け付けない(cake1.3) if (empty($this->data)) { echo 'POST ではありません.'; return false; } // 変数が存在しているか確認. // これを抜きにすると, `is_uploaded_file()` で Warning が発生 if ( !isset($data['ThisModel']['row_file']['tmp_name']) || !isset($data['ThisModel']['row_file']['name'])) { echo 'ファイルが見つかりません.'; return; } // アップロードファイルか確認 if ( !is_uploaded_file($data['ThisModel']['row_file']['tmp_name'])) { echo '不正なアップロードです.'; return; } // アップロードファイルをゴニョゴニョ $uploaded_fp = fopen($this->data['ThisModel']['row_file' ]['tmp_name'], 'r'); } }
良いアイディアが有りましたら、コメント頂けると幸いです。