PHP - 解析多部分表单数据

问题描述:

我试图放在一起的HTML POST-ed表单有两个字段 - 文件上传和文本字段。由于表单的文件上传类型为multipart/form-data,因此无法通过正常的PHP $ _POST变量获取文本字段。那么我怎样才能在PHP的表单中的文本字段?PHP - 解析多部分表单数据

按照要求,这里的一些代码,直接从安德鲁基本上采取:

<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 

完全相同输入两次。

+1

乔纳森和安德鲁说,$ _ POST应该工作,假设你使用后张贴您的形式(这是一个好的假设,因为你要发布的文件)。那么你可以发布一些代码吗?确保在html文本字段中设置了name属性,这就是你用来获取文本frield值的方法。 – alanquillin 2009-07-02 17:01:59

文件上传来自$_FILES。其他一切都通过$_POST(假设您的HTML表单的method属性设置为"post")。

+0

你的意思是假设表单*方法*是Post? – Pacerier 2012-01-11 05:38:09

+0

@Pacerier糟糕,感谢您的纠正。 – Sampson 2012-01-11 05:53:08

+0

客户是否一个一个地发送每个部分?我如何将它设置为一次发送文件和一些数据? – Richard 2015-06-23 00:57:18

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

不起作用。只是尝试,我甚至复制/粘贴你放在那里(但添加了一个提交按钮),并试图 - 绝对不行。如果我删除了enctype,它就可以工作,但是我当然没有得到他的文件,如果我将它作为多部分/表单数据,我会得到该文件,但是我*不会*获取POST-ed数据。 – DashRantic 2009-07-02 17:09:06

+0

应该工作。你的问题在别的地方。 – Javier 2009-07-02 17:15:25

+1

您使用的是哪个版本的PHP?任何配置更改和特殊扩展启用? – 2009-07-02 18:38:42

没有什么错与您的代码;可能是服务器配置的问题。

<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

[2010-02-13 10:57 UTC] sudeshkmr在雅虎点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。

行动=“upload.php的” < --------这个页面有比文件上传表单页面不同,它适用于PHP的所有配置!

请勿用于动作参数。

查看您的帖子限制。我疯了,试图找出是什么原因造成的。对Apache错误日志的快速检查表明帖子内容长度超出了限制。提高限制后,发布数据可用。

你可以检查你的web服务使用的是Chrome其余客户端扩展或通过该应用上传多部分数据工作正常 - http://itunes.apple.com/us/app/rest-client/id503860664?ls=1&mt=8

我有同样的问题,因为在最前面。如果您已经能够上传文件,那么请尝试加载文件大小小于1MB的文件,然后问题是upload_max_filesize和post_max_size值会增加这些值并再次尝试。这是解决我的问题。