Какой из $ _REQUEST, $ _GET и $ _POST самый быстрый? - PullRequest
173 голосов
/ 18 декабря 2009

Какой из этих кодов будет быстрее?

$temp = $_REQUEST['s'];

или

if (isset($_GET['s'])) {
  $temp = $_GET['s'];
}
else {
  $temp = $_POST['s'];
}

Ответы [ 14 ]

264 голосов
/ 18 декабря 2009

$_REQUEST по умолчанию содержит содержимое $_GET, $_POST и $_COOKIE.

Но это только значение по умолчанию, которое зависит от variables_order; и не уверен, что вы хотите работать с куки.

Если бы мне пришлось выбирать, я бы, вероятно, не использовал бы $_REQUEST, и я бы выбрал $_GET или $_POST - в зависимости от того, что должно делать мое приложение (т.е. один или другой, но не оба) : вообще говоря:

  • Вы должны использовать $_GET, когда кто-то запрашивает данные из вашего приложения.
  • И вы должны использовать $_POST, когда кто-то нажимает (вставка или обновление или удаление) данных в вашего приложения.

В любом случае, разница в производительности не будет большой: разница будет незначительной по сравнению с тем, что будет делать остальная часть вашего сценария.

31 голосов
/ 31 октября 2013

ПОЛУЧИТЬ против ПОЧТЫ

1) И GET, и POST создают массив (например, массив (ключ => значение, ключ2 => значение2, ключ3 => значение3, ...)). Этот массив содержит пары ключ / значение, где ключи - это имена элементов управления формы, а значения - входные данные пользователя.

2) И GET, и POST обрабатываются как $ _GET и $ _POST. Это суперглобальные, что означает, что они всегда доступны, независимо от области видимости, и вы можете получить к ним доступ из любой функции, класса или файла, не делая ничего особенного.

3) $ _GET - это массив переменных, передаваемых текущему сценарию через параметры URL.

4) $ _POST - это массив переменных, передаваемых текущему сценарию с помощью метода HTTP POST.

Когда использовать GET?

Информация, отправляемая из формы методом GET, видна всем (все имена и значения переменных отображаются в URL). GET также имеет ограничения на количество информации для отправки. Ограничение составляет около 2000 символов. Однако, поскольку переменные отображаются в URL-адресе, можно добавить страницу в закладки. Это может быть полезно в некоторых случаях.

GET может использоваться для отправки нечувствительных данных.

Примечание: GET НИКОГДА не должен использоваться для отправки паролей или другой конфиденциальной информации!

Когда использовать POST?

Информация, отправляемая из формы методом POST, невидима для других (все имена / значения встроены в тело HTTP-запроса) и не имеет ограничений на количество отправляемой информации.

Более того, POST поддерживает расширенные функциональные возможности, такие как поддержка двоичного ввода из нескольких частей при загрузке файлов на сервер.

Однако, поскольку переменные не отображаются в URL, невозможно добавить страницу в закладки.

21 голосов
/ 04 апреля 2013

$ _ GET извлекает переменные из строки запроса или вашего URL.>

$ _ POST извлекает переменные из метода POST, такого как (обычно) формы.

$ _ REQUEST - это слияние $ _GET и $ _POST, где $ _POST переопределяет $ _GET. Хорошо использовать $ _REQUEST для самореференциальных форм для валидации.

17 голосов
/ 18 декабря 2009

Я бы предложил использовать $_POST и $_GET явно.

Использование $ _REQUEST в любом случае должно быть ненужным при правильном дизайне сайта, и у него есть некоторые недостатки, такие как оставление вас открытыми для более простых CSRF/XSS атак и других глупостей, связанных с хранением данных в URL.

Разница в скорости в любом случае должна быть минимальной.

7 голосов
/ 18 декабря 2009

Не волнуйся. Но вы все равно должны использовать второе решение (плюс дополнительная проверка на отсутствие этих переменных), потому что есть проблемы безопасности с $_REQUEST (поскольку $_GET и $_POST не являются единственными источниками для этого массива).

Вчера был пост о проблемах с $_REQUEST, я полагаю. Позволь мне найти его.

РЕДАКТИРОВАТЬ : Ну да, не прямо пост, но здесь это все равно: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html

7 голосов
/ 18 декабря 2009

Используйте ЗАПРОС. Никто не заботится о скорости такой простой операции, и это намного более чистый код.

4 голосов
/ 18 декабря 2009
if (isset($_GET['s'])) {
  $temp = $_GET['s'];
}
else {
  $temp = $_POST['s'];
}

Используйте это, потому что это безопаснее и не даст заметной разницы в скорости

3 голосов
/ 21 апреля 2014

$ _ GET извлекает переменные из строки запроса или вашего URL.>

$ _ POST извлекает переменные из метода POST, такого как (обычно) формы.

$ _ REQUEST - это слияние $ _GET и $ _POST, где $ _POST переопределяет $ _GET. Хорошо использовать $ _REQUEST на самореференциальных формах для валидации.

2 голосов
/ 18 мая 2016

независимо от скорости, когда вы извлекали данные, используя $ _GET, $ _ POST или $ _REQUEST

но важно то, что вы не можете использовать $_GET альтернативу $_POST в некоторых случаях.

Когда ??

  • когда вы хотите загрузить файл.
  • когда вы не хотите показывать данные в URL.

GET также имеет ограничения на количество информации для отправки. Ограничение составляет около 2000 символов.

Другое дело, что есть несколько случаев, когда вы не можете получить данные, используя $_POST

Когда?

  • когда данные передаются в URL.

для отдыха

`GET` - Provides a read only access to a resource.

`PUT` - Used to create a new resource.

нет ничего плохого в использовании $_REQUEST.

Но способ сделать это - явно проверить $ _SERVER ['REQUEST_METHOD'], а не полагаться на то, что $ _POST пуст для GET.

1 голос
/ 21 октября 2017

Я использую это,

$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;

оператор проверяет, имеет ли $ _REQUEST более одного параметра (первый параметр в $ _REQUEST будет URI запроса, который можно использовать при необходимости некоторые пакеты PHP не возвращают $ _GET, поэтому проверьте, больше ли значение $ _GET больше 1, по умолчанию это будет $ _POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...