REQUEST_METHOD изменен на POST_method=POST.

Когда я делаю сообщение из формы, $_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, который изменяет переменную сообщения "_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 значения, кажется, что оно работает нормально.


person Jaco Roux    schedule 11.11.2013    source источник
comment
Какую версию cakephp вы используете?   -  person Leonardo    schedule 11.11.2013
comment
Я использую версию 2.3   -  person Jaco Roux    schedule 11.11.2013
comment
Но это происходит со всеми моими установками CakePHP, 2.2 и 2.3. Должно быть что-то изменилось в PHP или Apache, и я не уверен, что именно.   -  person Jaco Roux    schedule 11.11.2013
comment
_method — это поле, используемое для имитации других глаголов HTTP с формой (post). Проверьте ваши исходные файлы на наличие POST_method, эта строка откуда-то берется и ее нет в немодифицированном CakePHP. Судя по описанию, это может быть javascript, который искажает ваши значения формы - особенно из этого: '3_method=POST',   -  person AD7six    schedule 12.11.2013
comment
Я только что создал новый виртуальный хост, ничего, кроме формы, и значение все еще изменилось. Это также происходит во всех браузерах, так что это не какое-то расширение. Сделал HTTPFOX по запросу, и значение, отправляемое на сервер, чистое.   -  person Jaco Roux    schedule 12.11.2013


Ответы (2)


Кажется, я исправил это, хотя я до сих пор не знаю, что вызвало это.

Я не установил 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 вызвало изменение переменных.

Спасибо за ваш вклад от всех.

person Jaco Roux    schedule 12.11.2013

Значение устанавливается в CakeRequest::_processPost().

Он извлекает значение либо из переменной среды HTTP_X_HTTP_METHOD_OVERRIDE (которая происходит из заголовка HTTP X-HTTP-Method-Override), либо из поля _method POST. Последний автоматически определяется в скрытом поле классом FormHelper (см. FormHelper::create(), FormHelper::postList()).

Вам нужно будет выполнить некоторую отладку, проверить, отправляете ли вы упомянутый заголовок, просмотреть исходный HTML-код вашей формы, поле _method должно по умолчанию содержать только POST или PUT. Если в поле есть что-то еще, проверьте, не передаете ли вы параметр method вспомогательным методам (хотя в этом случае значение должно быть все в верхнем регистре).

person ndm    schedule 11.11.2013
comment
Пожалуйста, смотрите мое обновление кода в исходном вопросе, это действительно не имеет никакого смысла. - person Jaco Roux; 12.11.2013