[PHP]ファイルアップロードで $_FILE[***]['tmp_name']が空
動画をアップロードする機能を作った。
view 側はこんなかんじ。
<form action="/contents/upload" method="post" enctype="multipart/form-data"> <input type="file" name="upload_file"> <input type="submit" value="決定"> </form>
そしたら $_FILES["upload_file"]["tmp_name"] が取れなくなることがあった。
で、PHP 側で $_FILES["upload_file"] を dump してみるとこんな感じ。
Array ( [upload_file] => Array ( [name] => creephyp_daisuki.mov [type] => [tmp_name] => [error] => 1 [size] => 0 ) )
なんかアップロードに失敗しているっぽい。
error に 1 が入ってるので調べてみると、php.ini で設定されている「upload_max_filesize」という値より、アップロードファイルのサイズが超過していることが原因とのこと。
早速 phpinfo() で upload_max_filesize を確認。
<?php phpinfo(); ?>
を記述して確認してもいいし、実行サーバーで
$ php -r 'phpinfo();' | grep upload_max_filesize
のようにやってもOK。
確認したところ upload_max_filesize は 2M で設定されており、アップロードしようとしているファイルは見事に 2M 以上でした。
php.ini は、同じく phpinfo() の「Loaded Configuration File」の項目に書かれている場所にあるので、そこに書かれている php.ini を修正。
修正後は apache の再起動をすれば設定が反映されます。
反映後、再び $_FILES["upload_file"] を dump してみると無事アップロードできてることを確認。
Array ( [upload_file] => Array ( [name] => creephyp_daisuki.mov [type] => video/3gpp2 [tmp_name] => /tmp/phpUSl6ln [error] => 0 [size] => 991956 ) )
おしまい