upload_max_filesize post_max_sizeエラーの対策 CakePHP
PHPで大きなファイルをアップロードした時のエラーの原因
- post_max_size
- upload_max_filesize
このエラーによる問題
- CakePHPで空のデータがインサートされる
メソッドはポストなんだけどポストされたデータが全て空に。
nameが空なのでvalidateも機能せず、createdとmodifiedだけ追加されインサートされる。 - ポストされたデータが空になるので$_FILE['xxx']['size']でファイルサイズが取れない
post_max_sizeの対策
ポストしたデータのヘッダのContent-Lengthからポストされたサイズが分かるのでこれをチェックする。
if ($this->request->is('post')) { if ($_SERVER['CONTENT_LENGTH'] > (8*1024*1024)) { $this->Session->setFlash('アップロードサイズが上限を超えています。'); $this->Session->write('tmp_data', $this->request->data); $this->redirect($this->referer()); } } elseif ($this->Session->read('tmp_data')) { $this->request->data = $this->Session->read('tmp_data'); $this->Session->delete('tmp_data'); }
サイズチェックした後、元のページへリダイレクトしたら元のデータが消えてたのでセッションを使ってデータを渡した。
こんなやり方でいいのかな。。。
upload_max_filesizeの対策
MAX_FILE_SIZEを使えば、サイズオーバーなら$_FILE['xxx']['error']に2が返ってくる。
<input type="hidden" name="MAX_FILE_SIZE" value="2097152">
さらにvalidateの方でもファイルチェックを行う必要あり。