Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP解析PUT请求_Php_Regex_Ember Data_Put_Http Request - Fatal编程技术网

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将PUT请求解析为键/值对

请求来自余烬数据,类型为
表单数据
,我无法更改(据我所知,余烬数据不允许这样做)。我不想安装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而不是表单数据)。