首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中处理PUT/DELETE参数

在PHP中处理PUT/DELETE参数
EN

Stack Overflow用户
提问于 2010-01-18 01:26:03
回答 4查看 74.6K关注 0票数 84

我正在开发我的REST client library for CodeIgniter,我正在努力研究如何在PHP语言中发送、放置和删除参数。

在一些地方,我看到人们使用这些选项:

代码语言:javascript
复制
$this->option(CURLOPT_PUT, TRUE);
$this->option(CURLOPT_POSTFIELDS, $params);

令人恼火的是,这似乎什么也没做。这是设置PUT参数的正确方式吗?

如果是,如何设置删除参数?

$this->option()是我的库的一部分,它只是构建一个CURLOPT_XX常量数组,并在执行构建的cURL请求时将它们发送给curl_setopt_array()。

我正在尝试使用以下代码读取PUT和DELETE参数:

代码语言:javascript
复制
        case 'put':
            // Set up out PUT variables
            parse_str(file_get_contents('php://input'), $this->_put_args);
        break;

        case 'delete':
            // Set up out PUT variables
            parse_str(file_get_contents('php://input'), $this->_delete_args);
        break;

这里有两个选择,我以错误的方式处理这个问题,或者在我的库中有一个bug。如果你能让我知道这在理论上是否可行,我可以继续调试,直到我解决了它。

我不想在一个根本错误的方法上浪费更多的时间。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-18 02:29:10

不使用CURLOPT_PUT = TRUE,而是使用CURLOPT_CUSTOMREQUEST = 'PUT'CURLOPT_CUSTOMREQUEST = 'DELETE',然后使用CURLOPT_POSTFIELDS设置值。

票数 68
EN

Stack Overflow用户

发布于 2011-05-09 11:02:56

下面是一些代码,可能对其他想要处理PUT和DELETE参数的人有帮助。您可以通过$GLOBALS[]设置$_PUT$_DELETE,但除非声明为global或通过$GLOBALS[]访问,否则无法在函数中直接访问它们。为了解决这个问题,我创建了一个简单的类来读取GET/POST/PUT/DELETE请求参数。这也会用PUT/DELETE参数填充$_REQUEST

这个类将解析PUT/DELETE参数并支持GET/POST。

代码语言:javascript
复制
class Params {
  private $params = Array();

  public function __construct() {
    $this->_parseParams();
  }

  /**
    * @brief Lookup request params
    * @param string $name Name of the argument to lookup
    * @param mixed $default Default value to return if argument is missing
    * @returns The value from the GET/POST/PUT/DELETE value, or $default if not set
    */
  public function get($name, $default = null) {
    if (isset($this->params[$name])) {
      return $this->params[$name];
    } else {
      return $default;
    }
  }

  private function _parseParams() {
    $method = $_SERVER['REQUEST_METHOD'];
    if ($method == "PUT" || $method == "DELETE") {
        parse_str(file_get_contents('php://input'), $this->params);
        $GLOBALS["_{$method}"] = $this->params;
        // Add these request vars into _REQUEST, mimicing default behavior, PUT/DELETE will override existing COOKIE/GET vars
        $_REQUEST = $this->params + $_REQUEST;
    } else if ($method == "GET") {
        $this->params = $_GET;
    } else if ($method == "POST") {
        $this->params = $_POST;
    }
  }
}
票数 49
EN

Stack Overflow用户

发布于 2010-01-18 01:35:07

我认为你混淆了你的动词- PUT是用来放文件的,POST是用来张贴变量的(虽然你也可以张贴文件)。

要设置post变量,请使用带有param1=val1&param2=val2字符串或关联数组的CURLOPT_POSTFIELDS

要执行删除操作,您需要使用curl选项CURLOPT_CUSTOMREQUEST

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2081894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档