PHPでファイルアップロードがうまくいかない問題

 最近 PHPフレームワークである FuelPHP を使い始めたのですが、FuelPHP でファイルアップロードを実装しても特定のファイル(.wav)のみエラーになってしまい困っていました。

少し調べてみると原因は.wavであることが問題なのではなく、ファイルサイズが大きすぎることが原因だとわかりました。

 しかもこの問題は FuelPHP の場合は下記のようなエラーが出てきてしまい、原因が特定しづらくなっています。(<form>タグにenctypeがついてないぞって言われる)

Fuel\Upload\NoFilesException [ Error ]:

No uploaded files were found. Did you specify "enctype" in your <form> tag?

 因みにMacで開発していたときは、ファイルサイズが上限を超えていたときはそもそも$_FILE配列に何も入らないということも起きました。

 上記のような事象が発生した場合はまずファイルサイズの上限を疑ってみるといいかもしれません。

php.iniを編集して、アップロードサイズの上限を変更

 原因がファイルサイズだと判明したので、php.iniupload_max_filesizeの値を大きくすれば解決すると思っていたのですが、どうやらこれだけでは上手くいかないようです。 このほかにもpost_max_sizememory_limitの値も変更する必要があるみたいです、詳しくは下記のサイトを参照してください。

php.iniの設定を変えてもファイルをアップロードできないケース

 アップロードサイズの上限については、php.ini以外にも.htaccessファイルに記述しても問題ありません。 むしろphp.iniファイルの編集が出来ないレンタルサーバーもあるので、.htaccessに記述しておいたほうが無難なのではないかと思います。

 今回の事象で自分は.htaccessファイルの最後に下記のような記述を追加して対応しました。 なお、FuelPHP.htaccesspublic/にあります。

php_value memory_limit 40M
php_value post_max_size 32M
php_value upload_max_filesize 32M