我已阅读以下内容:
超文本传输协议(HTTP)是网络的生命。每次传输文档或发出AJAX请求时都会使用它。但是,在某些Web开发人员中,HTTP令人惊讶地相对不为人知。
HTTP谓词构成了我们“统一接口”约束的主要部分,并为我们提供了与基于名词的资源相对应的动作。主要或最常用的HTTP谓词(或方法,因为它们被正确调用)是POST,GET, PUT 和 DELETE 。
好吧,我们已经忘记了事情。
他们说, PUT
和DELETE
。我只听说过POST
和GET
,从来没有看到$_PUT
或$_DELETE
之类的东西在我见过的任何PHP代码中传递过。
这些方法(PUT)和(DELETE)是什么,如果可以在PHP中使用它们,我将如何解决这个问题。
注意:我知道这不是一个真正的问题但我总是抓住一个学习机会,如果我看到一个,并且非常希望学会在PHP中使用这些方法,如果可能的话。 / p>
答案 0 :(得分:43)
......
的这些方法(PUT)和(DELETE)是什么?
有很多词要用来解释这个问题,而且我没有足够的技巧去做,但是已经发布,快速回顾HTTP specification所描述的内容。
该协议基本上说明了这一点:
使用 GET ,并且您不必修改或更改此数据的状态
使用 POST 。防爆。从表单中将这些数据保存到某个地方。
当您需要访问资源并仅从响应中检索标题时,使用 HEAD ,而不需要任何资源数据。
当您需要替换该系统上已存在的某些数据的状态时,请使用 PUT 。
在您需要删除资源(相对于您已发送的URI)时,使用删除。
< / LI> 当您需要从资源获取通信选项时,使用 OPTIONS ,因此检查该资源的允许方法。防爆。我们将它用于CORS请求和权限规则。
协议基本上是一套规则,您应该在应用程序中使用这些规则来遵守它。
......如果可能的话 在PHP中使用它们,我将如何解决这个问题。
您应该从应用程序中检索与$_SERVER['REQUEST_METHOD']
一起使用的方法并做出相应的反应。
一些处理不支持PUT或DELETE方法的浏览器的应用程序使用这个技巧,一个来自html的隐藏字段,其值为ex。:
<input name="_method" type="hidden" value="delete" />
因此,从应用程序中,您现在可以将其识别为DELETE请求。
当您(您的浏览器,您的客户端)向HTTP服务器请求资源时,您必须使用协议(HTTP)接受的方法之一。所以你需要通过:
所以请求应如下所示:
GET /something/index.php?maybe=aparameter
现在,在您的应用程序中,PHP从此GET请求中获取参数并将它们插入到超全局(可访问的应用程序中)数组中。因此,您可以访问返回&#39; aparameter`的$_GET['maybe']
。
如果是POST请求,您会以类似的方式向HTTP服务器请求资源但具有重要区别。您在请求正文中提供数据:
POST /something/index.php
(body) maybe=aparameter
现在,在您的应用程序中,来自此POST请求的PHP获取参数并将它们插入到超全局(可访问的应用程序中)数组中。因此,您可以访问返回&#39; aparameter`的$_POST['maybe']
。
请同时注意响应状态代码(例如,如果您收到了PUT请求并且您已经更新了该资源而没有错误,则应该返回204状态 - 无内容 - ) 。
答案 1 :(得分:22)
使用PHP的PUT数据的方法:
$method = $_SERVER['REQUEST_METHOD'];
if ('PUT' === $method) {
parse_str(file_get_contents('php://input'), $_PUT);
var_dump($_PUT); //$_PUT contains put fields
}
答案 2 :(得分:10)
PHP的$_GET
和$_POST
命名不佳。 $_GET
用于访问查询字符串参数的值,$_POST
允许您访问请求正文。
使用查询字符串参数不仅限于GET请求,而且只有POST的其他类型的请求可以附带请求正文。
如果您想查找用于请求页面的动词,请使用$_SERVER['REQUEST_METHOD']
。
答案 3 :(得分:10)
最适合使用这些(PUT和DELETE)方法的地方是REST API。在我们使用http方法定义操作模式的地方,例如你想要获取任何资源,那么你可以使用以下内容:
GET http://api.example.com/employee/<any_id>
添加新项目:
POST http://api.example.com/employee/
更新或编辑:
PUT http://api.example.com/employee/
删除现有资源:
DELETE http://api.example.com/employee/1
等
现在在PHP
方面,您只需阅读所使用的HTTP
方法,以便您可以根据该方法采取行动。
有很多库可供您使用。
答案 4 :(得分:9)
这些方法是什么(PUT)和(删除)
简而言之,有些简化,PUT
用于将文件上传到网址,DELETE
用于从网址中删除文件。
从来没有看到
$_PUT
或$_DELETE
之类的东西在我曾经查看的任何PHP代码中传递
$_POST
和$_GET
非常名为superglobals。 $_POST
用于从请求正文解析的数据。 $_GET
用于从URL解析的数据。没有什么可以将这些地方(特别是URL)中的数据严格地绑定到特定的请求方法。
DELETE请求只关心URL的路径,因此没有要解析的数据。
PUT请求通常关心您使用file_get_contents('php://input');
访问的整个请求正文(不是它的解析版本)。
for和如果它可以在PHP中使用它们,我将如何解决这个问题。
您需要将URL映射到PHP脚本(例如使用URL rewriting),test the request method,找出what URL you were actually dealing with,然后编写代码以执行相应的操作