PHP中的POST和原始POST有什么区别?

时间:2010-07-04 02:36:34

标签: php html forms post

在阅读答案here之后,我有这个问题,有什么区别?

是否可以使用html提交原始POST?

4 个答案:

答案 0 :(得分:24)

我们可以在三种情况下分割表单提交:

  1. 内容类型为application/x-www-form-urlencoded
  2. 的提交
  3. 内容类型为multipart/form-data
  4. 的提交
  5. 其他提交。
  6. 在案例1和案例3中,$HTTP_RAW_POST_DATA包含原始发布数据(always_populate_raw_post_data选项设置为false除外,在这种情况下$HTTP_RAW_POST_DATA为空情况1),即与客户端(通常是浏览器)发送的数据完全相同的数据。在1的情况下,数据具有诸如

    的形式
    key1=value1&key2=value2&key3[]=value3.1&key3[]=value3.2
    

    PHP会自动解析此问题,以便$_POST成为:

    $_POST = array(
        "key1" => "value1",
        "key2" => "value2",
        "key3" => array("value3.1", "value3.2");
    )
    

    原始数据的内容也可以通过php://input进行访问,即使在always_populate_raw_post_data设置为false的情况下也是如此。特别是,file_get_contents("php://input")会提供$HTTP_RAW_POST_DATA已有或将要拥有的相同数据。

    在案例3中,POST数据是任意的,$_POST将是一个空数组,并且将始终填充$HTTP_RAW_POST_DATA

    案例2是一个特殊的案例。在这种情况下,PHP将解析数据,$_POST将获取未上传文件的字段的内容,但php://input$HTTP_RAW_POST_DATA将不可用。

答案 1 :(得分:5)

$HTTP_RAW_POST_DATA将包含以下内容:

beans=cheese&spam=eggs&one=two

PHP会为你拆分它,然后把它推到$_POST数组中。天真地,它做了这样的事情:

$parts = explode('&', $HTTP_RAW_POST_DATA);
foreach ( $parts as $part ) {
    list($key, $value) = explode('=', $part, 2);
    $_POST[$key] = $value;
}

使用可嵌入HTML的JavaScript,您可以使用AJAX发布任何您喜欢的内容。像这样:

var req = new XMLHttpRequest();
req.open('POST', 'http://www.example.com/my_url' true);
req.send('any data you want');

允许您将任意内容发布到Web服务器。

答案 2 :(得分:0)

_POST假定它是application/x-www-form-urlencodedmultipart/form-data表单值。 HTTP_RAW_POST_DATA,如果已填充,则为原始字符串。您也可以使用psuedo-url php://input访问它。您可以使用AJAX提交任意POST数据(例如XML,JSON,HTML)。

答案 3 :(得分:0)

$ _ POST是传入POST参数的关联数组。 PHP从原始HTTP帖子中为您创建了这个。如果您想自己处理原始POST数据(可能在POST中发送了一些二进制数据),请使用$ HTTP_RAW_POST_DATA。