php原生form支持put,PHP多部分表单数据PUT请求?

小编典典

首先,$_FILES在处理PUT请求时不填充。它仅在处理POST请求时由PHP填充。

您需要手动解析它。这也适用于“常规”字段:

// 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;

}

}

}

在每次迭代时,$data将使用您的参数填充数组,并$headers使用每个部分的标头(例如:Content-

Type等)填充数组,并$filename包含原始文件名(如果请求中提供了该文件名,并且适用于领域。

请注意,以上multipart内容仅适用于内容类型。Content-Type在使用上述内容解析正文之前,请务必检查请求标头。

2020-05-29

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值