UPDATE:2024年08月15日
PHP $_FILES(ファイル変数)のすべて【初心者向け基本】
$_FILES(ファイルアップロード変数)簡単まとめ
$_FILES(ファイルアップロード変数)とは
- $_FILES は PHPの定義済み変数(=スーパーグローバル変数)の1つ
- $_FILES は HTTP POST でアップロードされた値を取得するファイルアップロード変数
- $_FILES は 連想配列として使用する
- $_FILES は、関数やメソッドの内部で使用する場合、global $_FILES; とする必要がない
$_FILES(ファイルアップロード変数)の送受信
- $_FILES は HTTP POST でアップロードされた値を取得するファイルアップロード変数
- クライアントからサーバーへファイルをアップロードするには、HTML の formタグ の method属性 を POST にするHTML の formタグ enctype属性 を multipart/form-data にするHTML の inputタグ type属性 を file にする
- $_FILESには、アップロードされたファイルの
$_FILES['inputで指定したname']['name']:ファイル名
$_FILES['inputで指定したname']['type']:ファイルのMIMEタイプ
$_FILES['inputで指定したname']['tmp_name']:一時保存ファイル名
$_FILES['inputで指定したname']['error']:アップロード時のエラーコード
$_FILES['inputで指定したname']['size']:ファイルサイズ(バイト単位)
$_FILES['inputで指定したname']['full_path']:アップロードされたファイルのフルパス
の6種類のデータが格納される
$_FILES(ファイルアップロード変数)とは
- $_FILES は PHPの定義済み変数(=スーパーグローバル変数)の1つ
- $_FILES は HTTP POST でアップロードされた値を取得するファイルアップロード変数
- $_FILES は 連想配列として使用する
- $_FILES は、関数やメソッドの内部で使用する場合、global $_GET; とする必要がない
$_FILESは、PHPの定義済み変数のファイルアップロード変数です。この変数は、HTTP POST でアップロードされたファイルの値を取得する変数です。
$_FILESは、連想配列で使用します。
$_FILESは、スーパーグローバル変数なので、スクリプトのコード中どこからでも使用することが出来る変数です。関数やメソッドの内部で使用する場合にも global $_FILES; とする必要はありません。
$_FILESはPHPの定義済み変数
PHPの定義済み変数はスーパーグローバル変数とも言います。
$_FILES = PHPの定義済み変数 = スーパーグローバル変数
また、$_FILES は自動グローバル変数とも呼ばれます。
(PHPには定義済みの定数というものもあります。詳細はこちらを参照下さい。)
PHPの定義済み変数(=スーパーグローバル変数)
$GLOBALS (グローバル変数) | ・グローバルスコープで使用可能なすべての変数への参照 ・連想配列として使用 |
---|---|
$_SERVER (サーバー変数) | ・サーバ情報および実行時の環境情報 ・連想配列として使用 |
$_GET (ゲット変数) | ・HTTP GET 変数 ・連想配列として使用 |
$_POST (ポスト変数) | ・HTTP POST 変数 ・連想配列として使用 |
$_FILES (ファイル変数) | ・HTTP ファイルアップロード変数 ・連想配列として使用 |
$_REQUEST (リクエスト変数) | ・HTTP リクエスト変数 ・連想配列として使用 |
$_SESSION (セッション変数) | ・セッション変数 ・連想配列として使用 |
$_ENV (環境変数) | ・環境変数 ・連想配列として使用 |
$_COOKIE (クッキー変数) | ・HTTP クッキー ・連想配列として使用 |
これら、PHPの定義済み変数は、プログラムコード中何処からでも使用することができます。関数の内部でも globalキーワードを使用せず呼び出すことが出来ます。このように、スーパーグローバル変数は非常に便利なものです。
通常、変数には有効範囲などのルールがあります。このルールは、PHPにおいて変数のスコープという宣言の場所とそれによる有効範囲として定められています。スコープには、「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数」の4種類ありますが、これらすべてのスコープを持っているのがスーパーグローバル変数です。
変数のスコープについてはこちらを参照下さい。
※注意2:
ただし、スーパーグローバル変数は、関数やクラスメソッドの中の 可変変数 として使用することはできません。
可変変数についてはこちらを参照下さい。
$_FILESの送受信
- $_FILES は
HTTP POST でアップロードされた値を取得するファイルアップロード変数 - クライアントからサーバーへファイルをアップロードするには、HTML の formタグ の method属性 を POST にするHTML の formタグ enctype属性 を multipart/form-data にするHTML の inputタグ type属性 を file にする
- $_FILESには、アップロードされたファイルの
$_FILES['inputで指定したname']['name']:ファイル名
$_FILES['inputで指定したname']['type']:ファイルのMIMEタイプ
$_FILES['inputで指定したname']['tmp_name']:一時保存ファイル名
$_FILES['inputで指定したname']['error']:アップロード時のエラーコード
$_FILES['inputで指定したname']['size']:ファイルサイズ(バイト単位)
$_FILES['inputで指定したname']['full_path']:アップロードされたファイルのフルパス
の6種類のデータが格納される
$_FILESは、HTTP POST メソッドでアップロードされたファイルの値を取得します。
HTTPとは、ウェブブラウザとウェブサーバの間でHTMLなどのコンテンツの送受信に用いられる通信プロトコル(通信方法、通信規約というようなものです)のことです。
HTMLの<form>タグで「method属性をPOST」、「enctype属性をmultipart/form-data」にし、<input>タグで「type属性をfile」で送信されたデータが、HTTP POSTメソッドでアップロードされたファイルデータの変数になります。この変数を$_FILESの連想配列として取得することが出来ます。
$_FILESにはアップロードされたファイルの5種類のデータが格納されます。$_FILESは連想配列で使用しますが、key名に注目してください。
5種類のデータ | |
---|---|
$_FILES['inputで指定したname']['name'] | ファイル名 |
$_FILES['inputで指定したname']['type'] | ファイルのMIMEタイプ |
$_FILES['inputで指定したname']['tmp_name'] | サーバー上で一時的に保存されるテンポラリファイル名 |
$_FILES['inputで指定したname']['error'] | アップロード時のエラーコード |
$_FILES['inputで指定したname']['size'] | ファイルサイズ(バイト単位) |
例えば、input type file の name を uploadfile にして、001.gifという画像ファイルをアップロードした場合、$_FILES を print_r で確認すると以下のようになります。
1 | print_r($_FILES['uploadfile']); |
1 | Array ( [name] => 001.gif [type] => image/gif [tmp_name] => /tmp/phpU8v1j0 [error] => 0 [size] => 281 ) |
name、type、tmp_name、error、sizeの5種類の内容が確認できます。また、$_FILESは連想配列として使用するので、各データを取得するには以下のようにします。
1 2 3 4 5 | echo $_FILES['uploadfile']['name']."<br>\n"; echo $_FILES['uploadfile']['type']."<br>\n"; echo $_FILES['uploadfile']['tmp_name']."<br>\n"; echo $_FILES['uploadfile']['error']."<br>\n"; echo $_FILES['uploadfile']['size']."<br>\n"; |
以下はファイルをアップロードする簡単なサンプルコードです。files_upload1.php と files_upload2.php の2つのファイルを作成して、以下のコードを記述して下さい。
files_upload1.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <html> <meta name="robots" content="index"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <head> <title>PHP 変数 $_FILES</title> </head> <body> <h1>PHP 変数 $_FILES</h1> <form method="post" action="files_upload2.php" enctype="multipart/form-data"> <input type="file" name="uploadfile" size="20"> <input type="submit" value="アップロード"> </form> </body> </html> |
files_upload2.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <html> <meta name="robots" content="index"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <head> <title>PHP 変数 $_FILES</title> </head> <body> <h1>PHP 変数 $_FILES</h1> <hr/> <?php print_r($_FILES['uploadfile'])."<br>\n"; ?> <hr/> <?php echo $_FILES['uploadfile']['name']."<br>\n"; echo $_FILES['uploadfile']['type']."<br>\n"; echo $_FILES['uploadfile']['tmp_name']."<br>\n"; echo $_FILES['uploadfile']['error']."<br>\n"; echo $_FILES['uploadfile']['size']."<br>\n"; ?> </body> </html> |
結果は
Array ( [name] => 1.jpg [type] => image/jpeg [tmp_name] => /tmp/phpXNO3Hl [error] => 0 [size] => 700818 )
1.jpg
image/jpeg
/tmp/phpXNO3Hl
0
700818
となります。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | このページに 「uploadfile」という名前で FILES変数 を送信します。<br> <form method="post" action="https://wepicks.net/code-example/php/3-5-7.php" enctype="multipart/form-data"> <input type="file" name="uploadfile" size="20"> <input type="submit" value="アップロード"> </form> <div style="background-color:#ffffff;margin:10px; padding:10px; border:solid #efefef 1px;"> <?php //$_FILES['time']が存在していれば if(isset($_FILES['uploadfile'])){ echo '<strong>$_FILES[\'uploadfile\']が送信されました。<br>'; echo print_r($_FILES['uploadfile']); echo '/<strong>'; ?> <form action="https://wepicks.net/code-example/php/3-5-7.php" method="post"> <input type="submit" value="クリア"> </form> <?php }else{ echo '<strong>$_FILES[\'uploadfile\']はまだ送信されていません。'."</strong><br>\n"; } ?> </div> |
Array
(
[name] => 1.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpRxukKv
[error] => 0
[size] => 700818
)
1
タグ(=記事関連ワード)
日付
最終更新日:2024年08月15日