ナクナイ

勉強用の備忘録

[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」という値より、アップロードファイルのサイズが超過していることが原因とのこと。

PHP: エラーメッセージの説明 - Manual


早速 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
        )

)

おしまい