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
完全相同输入两次。
$_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>";
?>
不起作用。只是尝试,我甚至复制/粘贴你放在那里(但添加了一个提交按钮),并试图 - 绝对不行。如果我删除了enctype,它就可以工作,但是我当然没有得到他的文件,如果我将它作为多部分/表单数据,我会得到该文件,但是我*不会*获取POST-ed数据。 – DashRantic 2009-07-02 17:09:06
应该工作。你的问题在别的地方。 – Javier 2009-07-02 17:15:25
您使用的是哪个版本的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值会增加这些值并再次尝试。这是解决我的问题。
乔纳森和安德鲁说,$ _ POST应该工作,假设你使用后张贴您的形式(这是一个好的假设,因为你要发布的文件)。那么你可以发布一些代码吗?确保在html文本字段中设置了name属性,这就是你用来获取文本frield值的方法。 – alanquillin 2009-07-02 17:01:59