第8章 リクエスト情報 / 第2回 模擬試験
PHPのファイルアップロードに関する次の記述のうち、誤っているものはどれか。
アップロードフォームの`<form>`タグには`enctype="multipart/form-data"`を指定する必要がある。
アップロードされたファイルの一時保存先は`$_FILES['file']['tmp_name']`で取得できる。
アップロードサイズの上限は`php.ini`の設定に関係なく無制限である。
正解
`is_uploaded_file()`関数で、指定ファイルがHTTP POST経由でアップロードされたか確認できる。
解説
アップロードできるファイルサイズには上限があり、`php.ini`の`upload_max_filesize`(1ファイルあたりの上限)や`post_max_size`(POSTリクエスト全体の上限)によって制御されます。「無制限である」という記述は誤りです。
他の選択肢が正しい理由は次の通りです。
・ファイルアップロードを行うフォームの`<form>`タグには、`enctype="multipart/form-data"`の指定が必須です(省略するとファイルの中身が送信されません)。
・アップロードされたファイルは、一時的にサーバ上の一時ディレクトリに保存され、そのパスは`$_FILES['file']['tmp_name']`で取得できます。
・`is_uploaded_file()`は、指定したファイルパスが本当にHTTP POSTによるアップロードで作られた一時ファイルかどうかを確認する関数で、不正なパス指定への対策として`move_uploaded_file()`と組み合わせて使われます。
例:
```
// php.iniでの設定例
// upload_max_filesize = 8M
// post_max_size = 10M
```
(参照: 独習PHP 第4版 第8章 リクエスト情報 8.8節 アップロード処理 p.396〜403)