PHP中API的PUT请求和变量


PUT requests and variables for API in PHP

我目前正在构建一个API,我想将更新(我正在使用POST)与创建(我想使用PUT)分开。这似乎是一个愚蠢的问题,但我如何检索通过PUT发送的变量?PHP中没有$_PUT数组。我正试图用WFetch以这种方式发送数据:

Content-Type: application/x-www-form-urlencoded'r'n
'r'n
Name=Test'r'n

我试着查找如何使用PUT,但似乎搞不明白。

使用以下命令在PHP中创建$_PUT数组:

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

现在您可以使用$_PUT['Name']来获取"Test"

使用$_REQUEST["your target"]访问通过PUT请求发送的数据

PHP put让我很难过,这个函数会节省别人的时间:

function parsePutRequest()
    {
        // Fetch content and determine boundary
        $raw_data = file_get_contents('php://input');
        $boundary = substr($raw_data, 0, strpos($raw_data, "'r'n"));
    // Fetch each part
    $parts = array_slice(explode($boundary, $raw_data), 1);
    $data = array();
    foreach ($parts as $part) {
        // If this is the last part, break
        if ($part == "--'r'n") break; 
        // Separate content from headers
        $part = ltrim($part, "'r'n");
        list($raw_headers, $body) = explode("'r'n'r'n", $part, 2);
        // Parse the headers list
        $raw_headers = explode("'r'n", $raw_headers);
        $headers = array();
        foreach ($raw_headers as $header) {
            list($name, $value) = explode(':', $header);
            $headers[strtolower($name)] = ltrim($value, ' '); 
        } 
        // Parse the Content-Disposition to get the field name, etc.
        if (isset($headers['content-disposition'])) {
            $filename = null;
            preg_match(
                '/^(.+); *name="([^"]+)"(; *filename="([^"]+)")?/', 
                $headers['content-disposition'], 
                $matches
            );
            list(, $type, $name) = $matches;
            isset($matches[4]) and $filename = $matches[4]; 
            // handle your fields here
            switch ($name) {
                // this is a file upload
                case 'userfile':
                    file_put_contents($filename, $body);
                    break;
                // default for all other files is to populate $data
                default: 
                    $data[$name] = substr($body, 0, strlen($body) - 2);
                    break;
            } 
        }
    }
    return $data;
}