$_FILES
は、定義済み変数のひとつで、POSTメソッドでアップロードしたファイルの情報を格納した多次元配列となっている。
使い方
$_FILES
は、二次元配列になっているので、2つのキーで呼び出す。1つ目のキーは、フォーム部品のファイル送信欄のname属性値。2つ目のキーは、name
、type
、size
、tmp_name
、error
のいづれか。
例えば、ファイル送信欄のname属性値がuserFile
であれば、userFile
を1つ目のキーにする。ファイル名を呼び出すのであれば、2つ目のキーを「name」にし、$_FILES['userFile']['name']
となる。
- $_FILES[‘userFile’][‘name’]
ファイルの名前。
- $_FILES[‘userFile’][‘type’]
ファイルのMIME型。
- $_FILES[‘userFile’][‘size’]
ファイルのサイズ(バイト単位)。
- $_FILES[‘userFile’][‘tmp_name’]
テンポラリファイル名。
- $_FILES[‘userFile’][‘error’]
ファイルアップロードに関するエラーコード。
- 0: エラーなし。ファイルアップロード成功。
- 1: ファイルサイズが、「php.ini」の「upload_max_filesize」の値を超えている。
- 2: ファイルサイズが、送信フォームで指定した「MAX_FILE_SIZE」の値を超えている。
- 3: 一部しかアップロードされなかった。
- 4: アップロードされなかった。
- 6: テンポラリフォルダがない。
- 7: ディスクへの書き込みに失敗。
- 8: PHP拡張モジュールがファイルアップロードを中止。
$_FILES
は、スーパーグローバル変数で、プログラム全体の、どのスコープでも呼び出せる。関数の内部で呼び出す場合、グローバル変数は、グローバル宣言するが、スーパーグローバル変数は、グローバル宣言すら必要ない。
サンプル
<form action="sample.php" method="POST" enctype="multipart/form-data">
<p>ファイル: <input type="file" name="userFile" /></p>
<p><input type="submit" value="送信"></p>
</form>
<p>ファイル: <input type="file" name="userFile" /></p>
<p><input type="submit" value="送信"></p>
</form>
「sample.txt」というテキストファイルを送信すると、
<?php
echo '<p>$_FILES[userFile][name]: ' . "{$_FILES[userFile][name]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルの名前を出力
echo '<p>$_FILES[userFile][type]: ' . "{$_FILES[userFile][type]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルのMIME型を出力
echo '<p>$_FILES[userFile][size]: ' . "{$_FILES[userFile][size]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルのサイズ(バイト単位)を出力
echo '<p>$_FILES[userFile][error]: ' . "{$_FILES[userFile][error]}</p>"; // ファイルアップロードに関するエラーコードを出力
?>
echo '<p>$_FILES[userFile][name]: ' . "{$_FILES[userFile][name]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルの名前を出力
echo '<p>$_FILES[userFile][type]: ' . "{$_FILES[userFile][type]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルのMIME型を出力
echo '<p>$_FILES[userFile][size]: ' . "{$_FILES[userFile][size]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルのサイズ(バイト単位)を出力
echo '<p>$_FILES[userFile][error]: ' . "{$_FILES[userFile][error]}</p>"; // ファイルアップロードに関するエラーコードを出力
?>
↓↓↓出力結果↓↓↓
$_FILES[userFile][name]: sample.txt
$_FILES[userFile][type]: text/plain
$_FILES[userFile][size]: 12345
$_FILES[userFile][error]: 0
$_FILES[userFile][type]: text/plain
$_FILES[userFile][size]: 12345
$_FILES[userFile][error]: 0
ファイルサイズ制限
PHPで取得可能なファイルの最大サイズを指定する方法。
<form action="sample.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="10000" />
<p>ファイル: <input type="file" name="userFile" /></p>
<p><input type="submit" value="送信"></p>
</form>
<input type="hidden" name="MAX_FILE_SIZE" value="10000" />
<p>ファイル: <input type="file" name="userFile" /></p>
<p><input type="submit" value="送信"></p>
</form>
サイズが「12345」の「sample.txt」というテキストファイルを送信すると、
<?php
echo '<p>$_FILES[userFile][name]: ' . "{$_FILES[userFile][name]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルの名前を出力
echo '<p>$_FILES[userFile][type]: ' . "{$_FILES[userFile][type]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルのMIME型を出力
echo '<p>$_FILES[userFile][size]: ' . "{$_FILES[userFile][size]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルのサイズ(バイト単位)を出力
echo '<p>$_FILES[userFile][error]: ' . "{$_FILES[userFile][error]}</p>"; // ファイルアップロードに関するエラーコードを出力
?>
echo '<p>$_FILES[userFile][name]: ' . "{$_FILES[userFile][name]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルの名前を出力
echo '<p>$_FILES[userFile][type]: ' . "{$_FILES[userFile][type]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルのMIME型を出力
echo '<p>$_FILES[userFile][size]: ' . "{$_FILES[userFile][size]}</p>"; // name属性値が「userFile」のファイル送信欄に入力したしたファイルのサイズ(バイト単位)を出力
echo '<p>$_FILES[userFile][error]: ' . "{$_FILES[userFile][error]}</p>"; // ファイルアップロードに関するエラーコードを出力
?>
↓↓↓出力結果↓↓↓
$_FILES[userFile][name]: sample.txt
$_FILES[userFile][type]:
$_FILES[userFile][size]: 0
$_FILES[userFile][error]: 2
$_FILES[userFile][type]:
$_FILES[userFile][size]: 0
$_FILES[userFile][error]: 2
エラーコード「2」は、送信フォームで指定した「MAX_FILE_SIZE」をオーバーしていることによるエラーを示している。