Является ли $_SERVER ['REQUEST_METHOD'] еще жизнеспособным?

Итак, какое-то время я использовал следующее, чтобы проверить, были ли установлены мои данные post.

if( ! empty( $_POST ) ) { }

Но в последнее время я видел много сообщений, говорящих, что выше это "взломать", а ниже - правильный "лучший" способ.

if( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) { }

В последнее время я просто хочу сказать, что недавно нашел его. Все сообщения, которые обсуждают этот более поздний метод, относятся к 2009 году. Немного устаревшая по стандартам кодирования, поэтому я считаю, что это нормально, чтобы получить новое мнение по этой теме.

Я понял, что эти два метода разные. Первый считается "взломом", который просто проверяет, установлен ли массив сообщений, что произойдет, если будет сделан запрос на отправку. Второй фактически проверяет сервер, чтобы увидеть, был ли выполнен запрос на отправку. Я предполагаю, что второй может быть немного более безопасным, но если информация очищается, я не вижу, как это имеет большое значение.

Я также видел сообщения о том, что позже использовался только в версиях PHP <= 4, потому что PHP по-прежнему использовал глобальный $_REQUEST в данный момент, и именно так PHP-кодировщики использовали для определения источника определенного запроса paramters. Я не уверен, насколько точна эта последняя заявка, потому что вопросы, поставленные в старых сообщениях, такие же, как мои. Они используют сообщение global и не запрашивают. Однако это более поздняя публикация, чем любая другая (2011), и из источника, которому я доверяю. Поэтому я не уверен, что с этим делать.

А что делать при проверке на получение? Я видел, что несколько мест говорят, что в этом случае метод запросов на сервер не работает, и я могу только предположить, что это потому, что post supercedes get и метод запроса может содержать только один параметр. Итак, если у вас есть почта и данные, что вы делаете? Комментарий к одному из этих сообщений предполагает использование запроса global вместо post и get, но у меня сложилось впечатление, что это плохая идея.

Этот является самым последним источником, который я мог найти, и я сделал это, просмотрев похожие вопросы на стороне перед отправкой. Он специально спрашивает об использовании значения отправки, чтобы проверить, прошла ли форма, но также упоминает метод запроса. Многие из них, похоже, указывают на то, что позже все еще используется. Так ли этот совет по-прежнему действителен? Проверяет ли метод запроса еще лучший вариант?

Ответ 1

Да, он все еще там, и он все еще на 100% надежный. $_SERVER["REQUEST_METHOD"] var устанавливается самим PHP, основываясь на фактическом методе запроса, используемом пользовательским подключением. Пользователь не может отправлять параметр запроса или иным образом влиять на значение этого var, кроме как путем изменения типа запроса.

Ваш if(!$_POST) не является надежным, поскольку он может выполнять запись, но не отправлять какие-либо данные по ней, например:

<form method="post">
<input type="submit" />
</form>

создаст такой пустый массив $_POST - в форме нет именованных элементов формы, поэтому никакие данные не будут отправлены, но POST все еще выполняется.

Я бы не стал беспокоиться о том, что PHP4 не имеет этого суперглобала. PHP 4 - это версия с каменным вектором, а код, поддерживающий v4, но построенный на v5, должен содержать столько уродливых/отвратительных хаков для достижения обратной совместимости, что любой, кто должен работать над этим кодом, страдает от кошмаров. PHP 4 следует считать мертвым и уйти.

Ответ 2

Я всегда использую переменную $_SERVER['REQUEST_METHOD']; для проверки метода запроса.

Эта переменная также говорит, что запрос является запросом 'GET', 'HEAD', 'POST' или 'PUT'.

http://php.net/manual/en/reserved.variables.server.php