【问题标题】:Get PATCH request data in PHP在 PHP 中获取 PATCH 请求数据
【发布时间】:2014-01-01 14:01:07
【问题描述】:

我需要向 PHP 应用程序发出 PATCH 请求。

如何从该应用程序内的 PATCH 请求中获取数据?

如果我必须使用POST 来做这件事,那只是对全局$_POST 变量的简单访问。

【问题讨论】:

  • 使用 $_SERVER['REQUEST_METHOD'] 获取请求类型。

标签: php rest


【解决方案1】:

我知道这已经解决了,但是对于任何希望得到类似答案的人来说

$_PATCH["name"];

有办法做到这一点:

parse_str(file_get_contents('php://input'), $_PATCH);

然后您可以像$_GET["something"]$_POST["something"] 一样访问它

$_PATCH["something"]

希望对某人有所帮助:)

【讨论】:

  • 等等,这行不通。我得到了类似------WebKitFormBoundaryDBQQ4THK5a0cbY20 Content-Disposition:_form-data;_name的钥匙
  • 好吧,我刚刚意识到这在 PHP 版本中可能无法正常工作
  • 甚至没有在PHP 7.2.34工作得到相同的----------------------------541429037887217943792898 Content-Disposition:_form-data;_name] => "key"
  • 我不认为parse_str() 可以解析multipart/form-data。这就是你得到边界字符串的原因。
【解决方案2】:

您可以使用php://input 流包装器获取数据:

$data = file_get_contents('php://input');

还要确保您的网络服务器支持 PATCH 请求,有些配置为仅响应 GET 和 POST。

【讨论】:

  • 但是如何像$_GET or $_POST 一样简单地使用这些数据.....它返回了一些奇怪的字符串
  • @santosh 没那么简单。您还应该检查 Content-Type 请求标头并决定如何处理此字符串。它可以是 JSON、base64 编码文件或 urlencoded 查询字符串。
【解决方案3】:

由于上述方法在 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']

【讨论】:

    【解决方案4】:

    我正在使用: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;    
                   
    }
    

    【讨论】:

      【解决方案5】:

      您拥有$_REQUEST superglobal,其中包含我们可以获取的所有数据,无论使用哪种 HTTP 方法(GETPOSTPATCHPUT

      【讨论】:

      • 不,你没有:An associative array that by default contains the contents of $_GET, $_POST and $_COOKIE.
      猜你喜欢
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 2012-04-03
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多