首先,
$_FILES在处理PUT请求时不填充。它仅在处理POST请求时由PHP填充。
您需要手动解析它。这也适用于“常规”字段:
// Fetch content and determine boundary$raw_data = file_get_contents('php://input');$boundary = substr($raw_data, 0, strpos($raw_data, "rn"));// 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 == "--rn") break; // Separate content from headers $part = ltrim($part, "rn"); list($raw_headers, $body) = explode("rnrn", $part, 2); // Parse the headers list $raw_headers = explode("rn", $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; } }}在每次迭代时,
$data将使用您的参数填充数组,并
$headers使用每个部分的标头(例如:
Content-Type等)填充数组,并
$filename包含原始文件名(如果请求中提供了该文件名,并且适用于领域。
请注意,以上
multipart内容仅适用于内容类型。
Content-Type在使用上述内容解析正文之前,请务必检查请求标头。



