当从表单发帖时,$_SERVER['REQUEST_METHOD']
是POST_method=POST
,当我做一个正常的获取请求时,值是GET
。从来没有这种情况,并且在我更新服务器后发生了变化。
我几乎可以肯定该值应该是POST
例子:
'REQUEST_METHOD' => 'POST_method=POST',
我正在使用 CakePHP 并删除$this->request->onlyAllow('post', 'delete');
设置的位置,我得到一个错误Method not allowed
,我理解,因为该方法不是 POST。
有谁知道这是在服务器上还是在 php 配置中设置的?
更新1:
如果我提交此表格:
<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'
)
)
)
)
所以奇怪的事情正在发生。当表单没有任何字段时,请求方法会更改,如果我有字段,字段值看起来很有趣。
有什么建议可能导致这种情况吗?
更新 2:
我只是在它自己的 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?
更新 3
表格 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 个值,它似乎工作正常。