带参数的表单操作 - 参数不在$ _GET或$ _POST中

时间:2012-02-16 17:28:53

标签: php post get request superglobals

我正在重新实现一个REST API,客户端没有源代码,并且无法访问服务器......

我发现调用者正在发帖但没有发布数据。所有参数都在URL中指定,如果是发布表单,则将采取什么操作。

像这样:

"POST http://foo.com/api/rest/?method=users.add_user&token=foo&section=bar&group=baz HTTP/1.1" 200 605 "-" "-" 

令我惊讶的是,这些参数既不是$ _GET也不是$ _POST,但仅在$ _REQUEST中可用。

我在这里遗漏了什么吗?为什么他们不是$ _GET作为访问的URL的一部分?显而易见的答案是“因为这是一个POST所以GET未定义”?

有人能教育我对那些超级全局的错误观念吗?

1 个答案:

答案 0 :(得分:2)

$ _ GET和$ _POST为空,因为您使用的是POST协议,但是通过GET方法发送变量(在U​​RL中对它们进行编码)。

PHP正在查找使用的POST方法,因此它将$ _GET变量中的信息设置为空,然后将表单POST数据中发送的变量解析为$ _POST变量,即:nothing。

另一方面,$ _REQUEST变量在不同的机制上运行,它将解析来自请求的所有变量,无论它们来自cookie,多部分数据,post,get等。这就是你在那里看到它们的原因。

通常,脚本和应用程序无论如何都会处理$ _REQUEST数据,因为它是所有数据的更简洁的集合,并且因为您在技术上不能在同一请求中拥有GET和POST数据,所以您不必担心关于数据集之间的冲突。