从表单发帖后,$_SERVER['REQUEST_METHOD']
为POST_method=POST
,当我执行正常的请求时,值为GET
。从来没有这种情况,并在我更新服务器后发生了变化。
我几乎可以肯定该值应该是POST
示例:
'REQUEST_METHOD' => 'POST_method=POST',
我正在使用CakePHP,并且在设置$this->request->onlyAllow('post', 'delete');
的删除时,我得到Method not allowed
的错误,我理解,因为该方法不是POST。
有谁知道在服务器或php配置中设置的位置?
如果我提交此表格:
<form action="/sources/select_categories/10" id="SourceCategorySelectCategoriesForm" method="post" accept-charset="utf-8">
<div style="display:none;"><input type="hidden" name="_method" value="POST"/></div>
<div class="submit"><input class="btn btn-primary btn-lg" type="submit" value="Select Categories"/></div>
</form>
我明白了:
'REQUEST_METHOD' => 'POST_method=POST',
,发布的值为:
array(
'_method' => 'POST_method=POST'
)
如果我提交此表格:
<form action="/sources/select_categories/10" id="SourceCategorySelectCategoriesForm" method="post" accept-charset="utf-8">
<div style="display:none;"><input type="hidden" name="_method" value="POST"/></div>
<input type="checkbox" name="data[SourceCategory][category_ids][]" value="5" id="SourceCategoryCategoryIds"/>
<input type="checkbox" name="data[SourceCategory][category_ids][]" value="6" id="SourceCategoryCategoryIds"/>
<input type="checkbox" name="data[SourceCategory][category_ids][]" value="4" id="SourceCategoryCategoryIds"/>
<input type="checkbox" name="data[SourceCategory][category_ids][]" value="3" id="SourceCategoryCategoryIds"/>
<div class="submit"><input class="btn btn-primary btn-lg" type="submit" value="Select Categories"/></div></form>
我明白了:
'REQUEST_METHOD' => 'POST',
但收到的值是:
array(
'_method' => 'POST',
'data' => array(
'SourceCategory' => array(
'category_ids' => array(
(int) 0 => '5',
(int) 1 => '6',
(int) 2 => '4',
(int) 3 => '3_method=POST',
(int) 4 => '5',
(int) 5 => '6',
(int) 6 => '4',
(int) 7 => '3'
)
)
)
)
所以有些奇怪的事情正在发生。当表单中没有任何字段时,Request方法会更改,如果我有字段,则字段值看起来很有趣。
任何可能导致此问题的建议?
我刚刚在它自己的php文件中尝试了一个表单,一起绕过cakephp
<form action="test2.php" method="post">
<input type="hidden" name="_method" value="POST"/>
<input type="submit" value="Select Categories"/>
</form>
$ _SERVER [“REQUEST_METHOD”]保持“POST”,但print_r($ _ POST)呈现:
Array
(
[_method] => POST_method=POST
)
所以似乎必须是php或apache才能更改post变量“_method”,然后CakePHP更改$ _SERVER [“REQUEST_METHOD”]。
这让我一无所知,我不知道从哪里开始。也许卸载php和apache?
表格1
<form action="test2.php" method="post">
<input type="hidden" name="x" value="y"/>
<input type="submit" value="Submit"/>
</form>
给出
Array
(
[x] => yx=y
)
表格2:
<form action="test2.php" method="post">
<input type="hidden" name="x" value="y"/>
<input type="hidden" name="a" value="b"/>
<input type="submit" value="Submit"/>
</form>
给出:
Array
(
[x] => y
[a] => b
)
因此,如果发布了一个隐藏值,无论名称如何,它都会被更改,如果发布了2个值,它似乎工作正常。
答案 0 :(得分:1)
我似乎修好了它,虽然我仍然不知道是什么造成的。
我安装了PHP
sudo apt-get -y purge php*
然后安装PHP
sudo apt-get install php5
然后我所有的libs
sudo apt-get install php5-mysql
sudo apt-get install php5-gd
sudo apt-get install php5-xmlrpc
sudo apt-get install php5-curl
毕竟它仍然有效。不确定我是否忘记了任何事情,但一切似乎都再次发挥作用。
我仍然想知道php lib导致变量被改变了。
感谢所有人提供的所有意见。
答案 1 :(得分:0)
该值在CakeRequest::_processPost()
中设置。
它从HTTP_X_HTTP_METHOD_OVERRIDE
环境变量(源自X-HTTP-Method-Override
HTTP标头)或_method
POST字段中检索值。后者由FormHelper
类自动在隐藏字段中定义(请参阅FormHelper::create()
,FormHelper::postList()
)。
您必须进行一些调试,检查是否要发送提到的标头,查看表单的HTML源代码,_method
字段默认情况下应仅包含POST
或{{ 1}}。如果该字段中还有其他内容,请检查您是否可能将PUT
选项传递给辅助方法(尽管在这种情况下,该值应全部为大写)。