Какой из этих кодов будет быстрее?
$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
, когда кто-то нажимает (вставляет или обновляет или удаляет) данные в ваше приложение.В любом случае, не будет большой разницы в производительности: разница будет незначительной, по сравнению с тем, что будет делать остальная часть вашего script.
GET против POST
1) И GET, и POST создают массив (например, array (key = > value, key2 = > value2, key3 = > value3,...)). Этот массив содержит пары ключ/значение, где ключи - это имена элементов управления формой, а значения - это входные данные от пользователя.
2) И GET, и POST обрабатываются как $_GET и $_POST. Это суперглобалы, что означает, что они всегда доступны независимо от области видимости - и вы можете получить к ним доступ из любой функции, класса или файла без необходимости делать что-либо особенное.
3) $_GET - это массив переменных, переданных в текущий script через параметры URL.
4) $_POST - это массив переменных, переданных в текущий script с помощью метода 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 для саморефессиональных форм для валидации.
Я бы предложил использовать $_POST
и $_GET
явно.
Использование $_REQUEST в любом случае должно быть ненужным при правильном дизайне сайта, и в нем есть некоторые недостатки, такие как отказ от доступа к более легким атакам CSRF/XSS
и другим глупостям, возникающим в результате хранения данных в URL-адресе.
Разница в скорости должна быть минимальной в любом случае.
Используйте REQUEST. Никто не заботится о скорости такой простой операции, и это намного более чистый код.
Не волнуйся. Но вы все равно должны использовать второе решение (плюс дополнительная проверка для того, чтобы ни одна из этих переменных не существовала), потому что есть проблемы безопасности с $_REQUEST
(поскольку $_GET
и $_POST
не являются единственными источниками для этого массива).
Вчера было сообщение о проблемах с $_REQUEST
. Позволь мне найти его.
РЕДАКТИРОВАТЬ: О, хорошо, а не напрямую, но здесь все равно: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html p >
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Используйте это, потому что оно безопаснее, и оно не будет иметь заметной разницы в скорости.
$_ GET извлекает переменные из строки запроса или вашего URL. >
$_ POST извлекает переменные из метода POST, такие как (обычно) формы.
$_ REQUEST - это слияние $_GET и $_POST, где $_POST переопределяет $_GET. Хорошо использовать $_REQUEST для саморефессиональных форм для валидации.
Существуют определенные проблемы безопасности, так как хакер может установить 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.
Я бы использовал второй метод, поскольку он более явный. В противном случае вы не знаете, откуда происходят переменные.
Зачем вам все равно проверять GET и POST? Разумеется, использование одного или другого имеет смысл.
Я использую только _GET или _POST. Я предпочитаю иметь контроль.
Что мне не нравится в любом фрагменте кода в OP, так это то, что они отбрасывают информацию о том, какой метод HTTP был использован. И эта информация важна для входной санитарии.
Например, если script принимает данные из формы, которая будет введена в БД, тогда в форме лучше использовать POST (использовать GET только для идемпотентных действий). Но если script получает входные данные с помощью метода GET, он должен (обычно) отклоняться. Для меня такая ситуация может потребовать записи нарушения безопасности в журнал ошибок, поскольку это знак, над которым кто-то пытается что-то сделать.
С помощью либо фрагмента кода в OP эта санитация будет невозможна.
Я использовал бы $_POST
и $_GET
, потому что иначе, чем $_REQUEST
на их содержимое не влияет variables_order
.
Когда использовать $_POST
и $_GET
зависит от того, какая операция выполняется. Операция, которая изменяет данные, обрабатываемые с сервера, должна выполняться через запрос POST, тогда как другие операции должны выполняться с помощью запроса GET. Чтобы сделать пример, операция, которая удаляет учетную запись пользователя, не должна выполняться непосредственно после того, как пользователь нажимает на ссылку, а просмотр изображения может быть выполнен по ссылке.
Я использую это,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
утверждение проверяется, если $_REQUEST имеет более одного параметра (первым параметром в $_REQUEST будет запрос uri, который может быть использован в случае необходимости, некоторые PHP-пакеты не возвращают $_GET, поэтому проверьте, превышает ли его более 1 за $_GET, по умолчанию будет $_POST.
Вы преждевременно оптимизируете. Кроме того, вы должны действительно подумать о том, следует ли использовать GET для вещей, которые вы отправляете по соображениям безопасности.