【发布时间】:2014-01-01 14:01:07
【问题描述】:
我需要向 PHP 应用程序发出 PATCH 请求。
如何从该应用程序内的 PATCH 请求中获取数据?
如果我必须使用POST 来做这件事,那只是对全局$_POST 变量的简单访问。
【问题讨论】:
-
使用 $_SERVER['REQUEST_METHOD'] 获取请求类型。
我需要向 PHP 应用程序发出 PATCH 请求。
如何从该应用程序内的 PATCH 请求中获取数据?
如果我必须使用POST 来做这件事,那只是对全局$_POST 变量的简单访问。
【问题讨论】:
我知道这已经解决了,但是对于任何希望得到类似答案的人来说
$_PATCH["name"];
有办法做到这一点:
parse_str(file_get_contents('php://input'), $_PATCH);
然后您可以像$_GET["something"] 和$_POST["something"] 一样访问它
$_PATCH["something"]
希望对某人有所帮助:)
【讨论】:
------WebKitFormBoundaryDBQQ4THK5a0cbY20 Content-Disposition:_form-data;_name的钥匙
PHP 7.2.34工作得到相同的----------------------------541429037887217943792898 Content-Disposition:_form-data;_name] => "key"
parse_str() 可以解析multipart/form-data。这就是你得到边界字符串的原因。
您可以使用php://input 流包装器获取数据:
$data = file_get_contents('php://input');
还要确保您的网络服务器支持 PATCH 请求,有些配置为仅响应 GET 和 POST。
【讨论】:
$_GET or $_POST 一样简单地使用这些数据.....它返回了一些奇怪的字符串
由于上述方法在 PHP 5.6 中对我不起作用,所以这里有一个实际可行的解决方案。
我使用this parse_raw_http_request($data) function by Christof。
这是代码:
$_PATCH = [];
parse_str(file_get_contents('php://input'), $_PATCH);
parse_raw_http_request($_PATCH);
// From now on, the $_PATCH variable keeps all request arguments as well,
// and they're accessible under approprate keys like $_PATCH['yourKey']
【讨论】:
我正在使用:PHP 7.4
function patchMethod(){
parse_str(file_get_contents('php://input'), $_PATCH);
$body=[];
if (is_array($_PATCH)) {
foreach ($_PATCH as $key => $value) {
$body[$key] = $value;
}
}
return $body;
}
【讨论】:
您拥有$_REQUEST superglobal,其中包含我们可以获取的所有数据,无论使用哪种 HTTP 方法(GET、POST、PATCH、PUT)
【讨论】:
An associative array that by default contains the contents of $_GET, $_POST and $_COOKIE.