web-dev-qa-db-ja.com

マルチパートフォームデータの解析

2つのフィールド(ファイルのアップロードとテキストフィールド)を持つHTML POSTされたフォームをまとめようとしています。フォームにはファイルアップロード用のタイプmultipart/form-dataがあるため、通常のPHP $ _POST変数ではテキストフィールドにアクセスできません。テキストを取得するにはどうすればよいですか。 PHPのフォームのフィールド?

リクエストに応じて、基本的にAndrewから直接取得したコードをいくつか示します。

<html>
    <body>
        <form action="test2.php" method="post" enctype="multipart/form-data">
            Name: <input type="text" name="imageName" />
            Image: <input type="file" name="image" />
            <input type="submit" value="submit" />
        </form>
    </body>
</html>

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>

これがテストファイル全体です。 enctypeを削除すると、POSTされたデータは取得できますが、ファイルは取得できません。 enctypeをmultipart/form-dataとして使用すると、ファイルを取得できますが、POSTされたデータからは何も取得できません。

Enctypeを使用した出力は次のとおりです。

array(5) {
  ["name"]=>
  string(34) "testing.png"
  ["type"]=>
  string(0) ""
  ["tmp_name"]=>
  string(0) ""
  ["error"]=>
  int(1)
  ["size"]=>
  int(0)
}

なし:

testing

NULL

どちらも同じ正確な入力。

22
DashRantic

ファイルのアップロードは $_FILES を介して行われます。それ以外はすべて $_POST です(もちろん、HTMLフォームのmethod属性が"post"に設定されていると想定しています)。

26
Sampson

投稿制限を確認してください。私はこれを引き起こしているものを理解しようとして頭がおかしくなりました。 Apacheエラーログを簡単に確認すると、投稿コンテンツの長さが制限を超えていることがわかりました。制限を引き上げると、投稿データが利用可能になります。

9
shane

$_POSTは、テキストフィールドで問題なく機能するはずです。実際のファイルには$_FILESを使用する必要があります。次のHTMLがあるとします。

<html>
  <body>
    <form action="self.php" method="post" enctype="multipart/form-data">
      Name: <input type="text" name="imageName" />
      Image: <input type="file" name="image" />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

次の方法でフィールドにアクセスできます。

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>
5
Andrew Moore

コードに問題はありません。サーバー構成に問題がある可能性があります。

<form action="" method="post" enctype="multipart/form-data"> 
 Name: <input type="text" name="imageName"> 
 Image: <input type="file" name="image"> 
 <input type="submit" value="submit"> 
</form> 

<?php var_dump($_POST, $_FILES); ?> 

スクリプト: http://sandbox.phpieceofcake.com/upload/1246558881125336.php
ソース: http://sandbox.phpieceofcake.com/upload/1246558881125336.phps

1
Shanshui

最初に示したのと同じ問題がありました。 1MB未満のファイルサイズを読み込んで試してください。ファイルをアップロードできた場合は、upload_max_filesizeとpost_max_sizeの値がこれらの値を増やしてから、もう一度試してください。これが私の問題の解決策でした。

1
Carlos Vázquez

[2010-02-13 10:57 UTC] yahoo dot comのsudeshkmr

私は同じ問題に直面し、何もうまくいきませんでした。私はApache 2.2、PHP 5.3でテストしました。また、Apache 2.2およびPHP 5.3でUbuntu(Karmic)でもテストしました。 nGinX 0.8およびPHP 5.3。

その後、回避策を見つけました。 action = ""パラメータは、ファイルアップロードフォームがあるスクリプトページ自体であってはなりません。たとえば、アップロードフォームを含むページindex.phpがあるとします。

Action = "upload.php" <--------このページは、ファイルアップロードフォームページとは異なる必要があり、PHPのすべての構成で機能します。

Actionパラメータには使用しないでください。

0
Greg Willson