PHP - 解析多部分表单数据

时间:2009-07-02 16:54:11

标签: php html multipartform-data

我正在尝试整理一个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-ed数据,但当然不是文件。使用enctype作为multipart / form-data,我可以获取文件,但没有来自POST-ed数据。

这是带有enctype的输出:

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

testing

NULL

两次输入相同。

7 个答案:

答案 0 :(得分:26)

文件上传来自$_FILES。其他所有内容都来自$_POST(当然,假设您的HTML表单的method属性设置为"post")。

答案 1 :(得分:8)

检查你的帖子限制。我正在疯狂地试图找出造成这种情况的原因。快速检查Apache错误日志显示帖子内容长度超出限制。提高限额后,可以获得发布数据。

答案 2 :(得分:5)

$_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>";
?>

答案 3 :(得分:1)

你的代码没有错;可能是服务器配置的问题。

<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

答案 4 :(得分:1)

我遇到了与开头所示相同的问题。通过加载小于1MB的文件来尝试它,如果您已经能够上传文件,那么您的问题是upload_max_filesize和post_max_size值会增加这些值并重试。这是解决我问题的方法。

答案 5 :(得分:0)

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

我遇到了同样的问题而没有任何效果。我在Windows Vista上测试了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”&lt; --------此页面必须与文件上传表单页面不同,它适用于PHP的所有配置!

不要用于动作参数。

答案 6 :(得分:-1)

您可以使用Chrome rest客户端扩展程序检查您的网络服务是否正常运行,以便通过此应用上传多部分数据 - http://itunes.apple.com/us/app/rest-client/id503860664?ls=1&mt=8