我读过以下内容:
超文本传输协议(HTTP)是网络的生命。每次传输文档或发出AJAX请求时都会使用它。但是,令人惊讶的是,在某些Web开发人员中,HTTP相对未知。
HTTP谓词构成了我们“统一接口”约束的主要部分,并为我们提供了与基于名词的资源相对应的动作。主要或最常用的HTTP谓词(或方法,因为它们被正确调用)是POST,GET,PUT和DELETE。
好吧,我们突然忘记了事情。
他们说,PUT
和DELETE
。我只听说过POST
和GET
,从来没有看过像我曾经看过的任何PHP代码中的$_PUT
或$_DELETE
。
这些方法(PUT)和(DELETE)是什么,如果可以在PHP中使用它们,我将如何解决这个问题。
注意:我知道这不是一个真正的问题但我总是抓住一个学习机会,如果我看到一个,并且非常想学习在PHP中使用这些方法,如果可能的话。
什么是这些方法(PUT)和(DELETE)...
有很多词要用来解释这个,而且我没有足够的技巧去做,但正如已经发布的那样,快速回顾一下HTTP specification所描述的内容。
该协议基本上说:
基本上,协议是一组规则,您应该从应用程序中使用它来遵守它。
...如果可以在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请求中获取参数并将它们插入到超全局(可访问的应用程序中)数组中。所以你可以访问返回'aparameter`的$_GET['maybe']
。
在POST请求的情况下,您以类似的方式向HTTP服务器请求资源但具有重要区别。您在请求正文中提供数据:
POST /something/index.php
(body) maybe=aparameter
现在,在您的应用程序中,来自此POST请求的PHP获取参数并将它们插入到超全局(可访问的应用程序中)数组中。所以你可以访问返回'aparameter`的$_POST['maybe']
。
请特别注意响应状态代码(例如,如果您收到了PUT请求并且您已经更新了该资源而没有错误,则应该返回204状态 - 无内容 - )。
从PHP使用PUT数据的方法:
$method = $_SERVER['REQUEST_METHOD'];
if ('PUT' === $method) {
parse_str(file_get_contents('php://input'), $_PUT);
var_dump($_PUT); //$_PUT contains put fields
}
PHP的$_GET
和$_POST
名字很差。 $_GET
用于访问查询字符串参数的值,$_POST
允许您访问请求正文。
使用查询字符串参数不仅限于GET请求,除了POST之外的其他类型的请求可以随请求体一起提供。
如果要查找用于请求页面的动词,请使用$_SERVER['REQUEST_METHOD']
。
最适合使用这些(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
方法,以便你可以根据它采取行动。
有很多库可以为您做到这一点。
这些方法是什么(PUT)和(DELETE)
简而言之,有些简化,PUT
用于将文件上传到URL,DELETE
用于从URL中删除文件。
从来没有看到像
$_PUT
或$_DELETE
在我看过的任何PHP代码中路过的东西
$_POST
和$_GET
非常名为superglobals。 $_POST
用于从请求正文解析的数据。 $_GET
用于从URL解析的数据。没有什么可以将这些地方(特别是URL)中的数据严格地绑定到特定的请求方法。
DELETE请求只关心URL的路径,因此没有要解析的数据。
PUT请求通常关心您使用file_get_contents('php://input');
访问的整个请求主体(不是它的解析版本)。
因为如果可以在PHP中使用它们,我将如何解决这个问题。
您需要将URL映射到PHP脚本(例如使用URL rewriting),test the request method,找出what URL you were actually dealing with,然后编写代码以执行相应的操作。