0

当从表单发帖时,$_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 个值,它似乎工作正常。

4

2 回答 2

1

我似乎已经修复了它,尽管我仍然不知道是什么原因造成的。

我卸载了 PHP

sudo apt-get -y purge php*

然后安装PHP

sudo apt-get install php5

然后我所有的库

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 导致变量被更改。

感谢大家的所有投入。

于 2013-11-12T13:12:24.453 回答
0

值正在设置中CakeRequest::_processPost()

HTTP_X_HTTP_METHOD_OVERRIDE它从环境变量(源自X-HTTP-Method-OverrideHTTP 标头)或_methodPOST 字段中检索值。后者由FormHelper类在隐藏字段中自动定义(请参阅FormHelper::create()FormHelper::postList())。

您必须进行一些调试,检查您是否发送了提到的标题,查看表单的 HTML 源代码,该_method字段默认情况下应该只包含POSTor PUT。如果该字段中还有其他内容,请检查您是否可能将method选项传递给辅助方法(尽管在这种情况下该值应全部为大写)。

于 2013-11-11T20:21:05.430 回答