インターネット老人おぢさん

【 #POST ?】質問:GETとPOSTは分かったけど、POSTとFILESを同時に使う理由がわからない【 #FILES ?】

最終更新:2021年02月27日 09時42分20秒(初公開:2021年02月27日 09時42分20秒

【 #POST ?】質問:GETとPOSTは分かったけど、POSTとFILESを同時に使う理由がわからない【 #FILES ?】

POSTとFILESの違い

  • <form method="post"> で送信できるのが$_POST
  • <form method="post" enctype="multipart/form-data"><input type="file"> の内容が$_FILES

です。
ファイルを送らないならenctyleは不要です。

これで結論ついているのですが、具体的にどうなるか検証していきましょう。

サンプルコード

<h1>POSTとFILESの違いを検証する</h1>
<form method="post" enctype="multipart/form-data" name="form1">
  <input type="text" name="text1" value="テキスト"> <br />
  <input type="file" name="file1"> <br />
  <input type="submit" value="アップロード"> <br />
</form>

<h2>出力結果確認</h2>
<?php
  echo "POST" . "<pre>";
  var_dump($_POST);
  echo "</pre><br>";

  echo "FILES" . "<pre>";
  var_dump($_FILES);
  echo "</pre><br>";
?>

フォームタグにデータを入れてアップロードボタンを入れるイメージです。
(画像は古い状態のものですが、表示位置が違うだけなので内容は同じです。)

出力結果

画像にもありますが、転記します。

POST
array(1) {
  ["text1"]=>
  string(6) "テキスト"
}


FILES
array(1) {
  ["file1"]=>
  array(5) {
    ["name"]=>
    string(0) ""
    ["type"]=>
    string(0) ""
    ["tmp_name"]=>
    string(0) ""
    ["error"]=>
    int(4)
    ["size"]=>
    int(0)
  }
}

formのメソッドをGETにする

この場合、ファイルをサーバーに送信できません。
ファイルを入れて送信ボタンを押しても、$_FILESには何も入りません。
つまり、enctypeはgetでは使えない ということです。

© 2020-2021のむらやごろう(@elder_uncle)

当サイトの全てのコンテンツを転載・無断での引用もお断りしています。