Какой из этих кодов будет быстрее?
$temp = $_REQUEST['s'];
или
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Какой из этих кодов будет быстрее?
$temp = $_REQUEST['s'];
или
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Ответы:
$_REQUEST
, По умолчанию, содержит содержимое $_GET
, $_POST
и $_COOKIE
.
Но это только значение по умолчанию, которое зависит от variables_order
; и не уверен, что вы хотите работать с куки.
Если бы мне пришлось выбирать, я бы, вероятно, не использовал $_REQUEST
, и я бы выбрал $_GET
или $_POST
- в зависимости от того, что должно делать мое приложение (т.е. одно или другое, но не оба) : вообще говоря:
$_GET
когда кто-то запрашивает данные из вашего приложения.$_POST
когда кто-то помещает (вставляет, обновляет или удаляет) данные в ваше приложение.В любом случае, разница в производительности не будет большой: разница будет незначительной по сравнению с тем, что сделает остальная часть вашего сценария.
ПОЛУЧИТЬ против ПОЧТЫ
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-адресе, невозможно добавить страницу в закладки.
$ _GET извлекает переменные из строки запроса или вашего URL.>
$ _POST извлекает переменные из метода POST, такого как (обычно) формы.
$ _REQUEST - это слияние $ _GET и $ _POST, где $ _POST переопределяет $ _GET. Хорошо использовать $ _REQUEST на самореференциальных формах для валидации.
GET
из строки запроса, POST
из отправки формы).
Я бы предложил использовать $_POST
и $_GET
явно.
В любом случае использование $ _REQUEST не должно быть необходимым при правильном дизайне сайта, и у него есть некоторые недостатки, такие как оставление вас открытыми для более легких CSRF/XSS
атак и других глупостей, возникающих при хранении данных в URL.
Разница в скорости должна быть минимальной в любом случае.
Используйте ЗАПРОС. Никто не заботится о скорости такой простой операции, и это намного более чистый код.
$_REQUEST
неправильного вывода. Смотри мой ответ.
Не беспокойся Но вы все равно должны использовать второе решение (плюс дополнительный чек ни одна из этих переменных существующих), потому что есть проблемы с безопасностью $_REQUEST
(начиная с $_GET
и $_POST
не являются единственными источниками для этого массива).
Был пост о проблемах со $_REQUEST
вчерашним днем, я полагаю. Позволь мне найти это.
РЕДАКТИРОВАТЬ : Ну хорошо, не прямо сообщение, но здесь это в любом случае: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Используйте это, потому что это безопаснее и не будет иметь заметного различия в скорости
$_REQUEST
но по-прежнему позволяет доступ к одному и тому же сценарию в любом случае (в моем случае один и тот же сценарий используется с разными «действиями», и иногда $ _GET будет в порядке, но в других случаях мне нужно $ _POST, чтобы скрыть / защитить данные).
Существуют определенные проблемы безопасности, так как хакер может установить cookie, который переопределит значение $ _POST или $ _GET. Если вы обрабатываете конфиденциальные данные, я бы не рекомендовал использовать $ _REQUEST. - Ксандор
Вы не можете использовать $_GET
альтернативу в $_POST
некоторых случаях.
Когда ??
GET
также есть ограничения на количество информации для отправки. Ограничение составляет около 2000 символов.
Другое дело, что есть несколько случаев, когда вы не можете получить данные, используя $_POST
Когда ?
Для отдыха
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
нет ничего плохого в использовании $_REQUEST
.
Но способ сделать это - явно проверить $ _SERVER ['REQUEST_METHOD'], а не полагаться на то, что $ _POST будет пустым для GET.
$_SERVER['REQUEST_METHOD']
чтобы проверить, будет ли скрипт вызываться с любым из них. Но сказать, что все в порядке, $_REQUEST
не на 100% верно. Существуют определенные проблемы безопасности, так как хакер может установить cookie, который переопределит значение $ _POST или $ _GET. Если вы обрабатываете конфиденциальные данные, я бы не рекомендовал использовать $_REQUEST
.
$ _GET извлекает переменные из строки запроса или вашего URL.>
$ _POST извлекает переменные из метода POST, такого как (обычно) формы.
$ _REQUEST - это слияние $ _GET и $ _POST, где $ _POST переопределяет $ _GET. Хорошо использовать $ _REQUEST на самореференциальных формах для валидации.
request_order
значений cookie и может содержать их, поэтому это не очень надежная и не полезная функция.
Я бы использовал второй метод, так как он более явный. В противном случае вы не знаете, откуда берутся переменные.
В любом случае, зачем вам проверять GET и POST? Конечно, использование одного или другого имеет больше смысла.
GET
будучи использованным только для одного элемента (например, для его перемещения) и POST
для нескольких из них (форма с флажками ...).
Я использую только _GET или _POST. Я предпочитаю иметь контроль.
Что мне не нравится ни в одном фрагменте кода в OP, так это в том, что они отбрасывают информацию о том, какой метод HTTP был использован. И эта информация важна для очистки входных данных.
Например, если скрипт принимает данные из формы, которая будет введена в БД, тогда в форме лучше использовать POST ( используйте GET только для идемпотентных действий ). Но если скрипт получает входные данные с помощью метода GET, он должен (обычно) быть отклонен. Для меня такая ситуация может потребовать записи нарушения безопасности в журнал ошибок, поскольку это признак того, что кто-то что-то пытается.
С любым фрагментом кода в OP эта очистка была бы невозможна.
$_POST
заключается в том, что сканеры поисковых систем не должны делать что-то вроде этого: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Я бы использовал $_POST
и $_GET
потому , что в отличие от $_REQUEST
их содержания не влияет variables_order
.
Когда использовать $_POST
и $_GET
зависит от того, какая операция выполняется. Операция, которая изменяет данные, обрабатываемые с сервера, должна выполняться с помощью запроса POST, тогда как другие операции должны выполняться с помощью запроса GET. Например, операция, которая удаляет учетную запись пользователя, не должна выполняться непосредственно после того, как пользователь щелкнет ссылку, а просмотр изображения можно выполнить по ссылке.
Я использую это,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
оператор проверяет, имеет ли $ _REQUEST более одного параметра (первым параметром в $ _REQUEST будет uri запроса, который можно использовать при необходимости, некоторые пакеты PHP не будут возвращать $ _GET, поэтому проверьте, если его значение больше $ 1 для $ _GET, по умолчанию это будет $ _POST.
Вы преждевременно оптимизируете. Кроме того, вы должны по-настоящему задуматься о том, следует ли использовать GET для вещей, которые вы размещаете, из соображений безопасности.
Это некрасиво, и я бы не рекомендовал его в качестве окончательного решения при отправке кода в реальном времени, но при построении функций отдыха иногда удобно иметь средство захвата параметра «все-таки»:
public static function parseParams() {
$params = array();
switch($_SERVER['REQUEST_METHOD']) {
case "PUT":
case "DELETE":
parse_str(file_get_contents('php://input'), $params);
$GLOBALS["_{$_SERVER['REQUEST_METHOD']}"] = $params;
break;
case "GET":
$params = $_GET;
break;
case "POST":
$params = $_POST;
break;
default:
$params = $_REQUEST;
break;
}
return $params;
}
Возможно, кто-то из креативщиков мог бы даже добавить к нему параметры командной строки или что-то еще из вашей IDE. После того, как вы решите, что делает данная функция rest, вы можете выбрать ту, которая подходит для данного вызова, чтобы убедиться, что вы получите то, что вам нужно для версии deploy. Это предполагает, что 'REQUEST_METHOD' установлен.
!isset($_REQUEST['s'])
,