很明显,php不支持$_PUT
PUT方法提交的简单form可以
parse_str(file_get_contents('php://input'), $data);
Content-Type:multipart/form-data; 这样的form通过put方法提交就很尴尬了
解决这个问题得有思路
先去找找开源代码
https://stackoverflow.com/questions/9464935/
实际使用发现有bug,贴一下修改后的
// 解析 http 请求类型是 multipart/form-data 的数据 function parse_multipart_form(){ // 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 $str) { $pos = strpos($str, ':'); $name = substr($str, 0, $pos) and $value = substr($str, 1+$pos); $headers[strtolower($name)] = ltrim($value, ' '); } // Parse the Content-Disposition to get the field name, etc. if (isset($headers['content-disposition'])) { preg_match( '/^(.+); *name="([^"]+)"(; *filename="([^"]+)")?/', $headers['content-disposition'], $matches ); list(,,$name) = $matches; $data[$name] = substr($body, 0, strlen($body) - 2); isset($matches[4]) and $data[$name] = ['filename'=>$matches[4],'binary'=>$data[$name]]; } } return $data; }
就这样了
相关推荐
c#没有现成的multipart/form-data库,自己封的一个demo供参考。
用C语言实现multipart/form-data文件上传,没有用到curl之类的库。之前做个小的日志上传程序写的。
使用indy自带的idhttp控件,用form表单(multipart/form-data)形式上传文件(图片,视频等)
<form method="post" ENCTYPE="multipart/form-data"> file类型职务的普通参数传递到后台问题解决
前端开源库-node-red-contrib-securedhttp-multipartnode red contrib secured http multipart,node red node创建安全的HTTP multipart端点
我们知道在通过POST方式向服务器发送AJAX请求时最好要通过设置请求头来指定为application/x-www-form-urlencoded编码类型。知道通过表单上传文件时必须指定编码类型为"multipart/form-data"。那么为什么要这么设置呢
解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?
验证PHP multipartform-data 的远程DOS漏洞,适用于绿盟扫描器直接扫出来的漏洞验证
c#下post 发送 multipart/form-data和JSON数据
前端开源库-node-red-contrib-http-multipartnode red contrib http multi part,一个节点red节点,用于为标准节点red http节点提供多部分形式支持。
c#模拟post发送json和multipart/form-data格式
使用c#实现的HttpClient拼接multipart/form-data形式参数post提交数据,包含图片内容,有需要的可以下载,希望能帮到有需要的人,
这份代码在 HttpMultipartFormDataParser (https://github.com/Vodurden/Http-Multipart-Data-Parser) 的基础上,解决了中文乱码的问题。希望给和我一样曾经被这个问题困扰的朋友一些帮助。 关于代码的使用方式,请...
解决java enctype multipart form-data文件上传传值问题 不使用jspsmartupload组件 可以轻轻松松 解决传值问题
1.SendNotification.jsp:发送通知页面,表单提交数据的类型为multipart/x-www-form-urlencoded 2.RecvNotification.jsp:接收通知页面 3.页面简单使用了Bootstrap样式 4.开发工具使用IDEA
c#post multipart/form-data和JSON数据
今天小编就为大家分享一篇python处理multipart/form-data的请求方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
使用multipart/form-data方式提交数据与普通的post方式有一定区别。multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,其值必须为multipart/form-data。另外还需要规定一个内容分割符用于分割...
Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传
解决上传文件enctype= multipart/form-data 时无法传递其他参数的问题,以及项目全局编码问题。用的插件是commons io + commons fileupload