PHP解析PUT请求
我花了几个小时试图让PHP将PUT请求解析为键/值对 请求来自余烬数据,类型为PHP解析PUT请求,php,regex,ember-data,put,http-request,Php,Regex,Ember Data,Put,Http Request,我花了几个小时试图让PHP将PUT请求解析为键/值对 请求来自余烬数据,类型为表单数据,我无法更改(据我所知,余烬数据不允许这样做)。我不想安装PHP扩展(限制我的托管选项)或使用PHP框架 因此,使用Postman,请求如下所示: ------WebKitFormBoundarytb5fqcjpCsLTsDjp Content-Disposition: form-data; name="phone_number" 1234567 ------WebKitFormBoundarytb5fqcj
表单数据
,我无法更改(据我所知,余烬数据不允许这样做)。我不想安装PHP扩展(限制我的托管选项)或使用PHP框架
因此,使用Postman,请求如下所示:
------WebKitFormBoundarytb5fqcjpCsLTsDjp
Content-Disposition: form-data; name="phone_number"
1234567
------WebKitFormBoundarytb5fqcjpCsLTsDjp
Content-Disposition: form-data; name="legal_name"
Drew Baker
------WebKitFormBoundarytb5fqcjpCsLTsDjp
Content-Disposition: form-data; name="first_name"
Drew
------WebKitFormBoundarytb5fqcjpCsLTsDjp
Content-Disposition: form-data; name="last_name"
Baker
------WebKitFormBoundarytb5fqcjpCsLTsDjp--
我不知道它在其他浏览器中会是什么样子。我想它看起来会不一样
目前我能做的最好的事情是:
$input = file_get_contents('php://input');
$patten = '';
preg_match_all($patten, $input, $matches);
我想不出一个更接近的模式。但我认为理想情况下,它会像这样搜索:
------WebKitFormBoundarytb5fqcjpCsLTsDjp
Content-Disposition: form-data; name="phone_number"
1234567
------WebKitFormBoundarytb5fqcjpCsLTsDjp
Content-Disposition: form-data; name="legal_name"
Drew Baker
------WebKitFormBoundarytb5fqcjpCsLTsDjp
Content-Disposition: form-data; name="first_name"
Drew
------WebKitFormBoundarytb5fqcjpCsLTsDjp
Content-Disposition: form-data; name="last_name"
Baker
------WebKitFormBoundarytb5fqcjpCsLTsDjp--
name=“
然后是介于两者之间的所有内容--
如果你们认为表单数据
在其他浏览器上的结构不同,也许有更好的模式可以使用
在我得到$matches
后,我计划在它们之间循环,并将所有内容合并到$\u请求超全局中,拥有所有正确的键/值对,如下所示:
$put_vars = array(
'phone_number' => '1234567',
'legal_name' => 'Drew Baker',
'first_name' => 'Drew',
'last_name' => 'Baker'
);
$_REQUEST = array_merge($_REQUEST, $put_vars);
我的计划是将它作为一个高级函数添加到我的代码中,类似于parse\u put\u vars\u into\u request
。但理想情况下,它也适用于DELETE和其他HTTP方法
我知道正则表达式不是解决这个问题的理想方法,但考虑到它需要处理表单数据
,这是我能想到的最好的方法
谢谢!正如@zedfoxus所指出的,这就是答案: 但是@steveax建议只制作一个自定义的Ember数据适配器,以避免完全使用PUT:
这两个都是很好的答案。我想我会尝试服务器端解决方案,因为我喜欢GET/POST/PUT/DELETE的RESTful特性。您是否尝试过
var\u dump($\u文件);
查看全局变量是否捕获了表单数据的内容?也可能有帮助。ember-data确实允许您自定义put。您需要创建一个适配器,扩展DS.adapter类,并创建您自己的方法(以及您需要的任何其他方法)。似乎比试图在后端解析表单数据要明智得多。这两个答案都很好,但都是注释!PHP甚至会解析PUT请求体吗?如果您使用自己的适配器,您可以将其保留为PUT,但可以让ember data在服务器上按照您的意愿格式化请求(例如,应用程序/json而不是表单数据)。