【PHP】「$_FILES」 — HTTP FILES 変数

【PHP】
「$_FILES」 — HTTP FILES 変数




「$_FILES」とは

HTTPのPOSTメソッドで,現在のスクリプトにアップロードされたファイル扱う連想配列。

$HTTP_POST_FILESは、$_POSTと同じ情報を持っている。
$HTTP_POST_FILESは、スーパーグローバルではない。
$HTTP_POST_FILESと$_FILES は違う変数で、PHPはそれぞれ別に扱う。


アップロードされたファイルは、テンポラリファイルとして保存されているので、
move_uploaded_file 関数を利用して、任意の場所へファイルを移動する。
エラーチェックをした後、ファイルの有無を確認して移動するのが良い。



POSTメソッドでのファイルの渡し方


<form action="スクリプトのURL" method="FILES">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<input name="名前" type="file" />
</form>

HTMLのフォームで、FILESメソッドで送信することで、PHPスクリプトに値を渡すことができる。



アップロードファイルの移動

アップロードされたファイルは、テンポラリファイルとして保存されているので、
「move_uploaded_file」関数を利用して、任意の場所へファイルを移動する。
エラーチェックをした後、ファイルの有無を確認して移動するのが良い。


「$_FILES」の書式


ファイル情報の参照方法

$_FILES["名前"]["name"];
$_FILES["名前"]["type"];
$_FILES["名前"]["tmp_name"];
$_FILES["名前"]["error"];
$_FILES["名前"]["size"];

name元のファイル名
typeファイルの MIME タイプ
tmp_nameサーバー上で保存されているテンポラリファイルの名前
errorエラーコード
sizeファイルサイズ(byte)



エラーコード

0 : UPLOAD_ERR_OK ファイルアップロードは成功しています。
1 : UPLOAD_ERR_INI_SIZE ファイルサイズが upload_max_filesize ディレクティブの値を超えています。
2 : UPLOAD_ERR_FORM_SIZE ファイルサイズが MAX_FILE_SIZE を超えています。
3 : UPLOAD_ERR_PARTIAL ファイルの一部のみしかアップロードされていません。
4 : UPLOAD_ERR_NO_FILE ファイルがアップロードされませんでした。
6 : UPLOAD_ERR_NO_TMP_DIR テンポラリフォルダがありません。
7 : UPLOAD_ERR_CANT_WRITE ディスクへの書き込みに失敗しました。
8 : UPLOAD_ERR_EXTENSION 拡張モジュールがファイルのアップロードを中止しました。

●アップロードファイルの最大サイズを制限する
php.iniの「upload_max_filesize」ディレクティブと「post_max_size」ディレクティブを超えるサイズのファイルはアップロードで不可。
サイズを超えてアップロードすると、変数「$_FILE」にはNULLがセットされる。

●フォームでアップロードファイルを指定しない場合
$_FILE[ パラメータ名 ][ size ]にゼロがセットされ、$_FILE[ パラメータ名 ][ error ]には「4」がセットされる。