Який із цих кодів буде швидшим?
$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
; і не впевнений, що ви хочете працювати з файлами cookie.
Якби мені довелося вибирати, я б, мабуть, не користувався $_REQUEST
, і я вибрав би $_GET
або $_POST
- залежно від того, що повинна робити моя програма (тобто те чи інше, але не те і інше) : загалом кажучи:
$_GET
коли хтось запитує дані з вашої програми.$_POST
коли хтось надсилає (додає або оновлює; або видаляє) дані до вашої програми.Так чи інакше, у виконанні не буде великої різниці: різниця буде незначною, порівняно з тим, що робитиме решта вашого сценарію.
GET vs. POST
1) І GET, і POST створюють масив (наприклад, масив (key => значення, key2 => value2, key3 => value3, ...)). Цей масив містить пари ключів / значень, де ключі - назви елементів форми, а значення - вхідні дані від користувача.
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
Я вважаю пост про проблеми з вчорашнім днем. Дозвольте мені піти його знайти.
EDIT : Ну добре, не безпосередньо повідомлення, але тут все одно: 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. Я вважаю за краще контролювати.
Що мені не подобається в жодному фрагменті коду в ОП, це те, що вони відкидають інформацію, для якої використовувався метод HTTP. І ця інформація важлива для санітарії введення.
Наприклад, якщо скрипт приймає дані з форми, яка буде введена в БД, тоді форма краще використовувати POST ( використовувати GET лише для ідентичних дій ). Але якщо скрипт отримує вхідні дані методом GET, його слід (як правило) відхилити. Для мене така ситуація може бути підставою для написання порушення безпеки в журнал помилок, оскільки це знак, що хтось щось намагається.
З будь-яким фрагментом коду в ОП ця санітарія була б неможливою.
$_POST
є те, щоб сканери пошукових систем не робили щось подібне: thedailywtf.com/Articles/WellIntenposed-Destruction.aspx
Я б використовував $_POST
, і $_GET
тому, що на $_REQUEST
їх зміст не впливає variables_order
.
Коли використовувати $_POST
та $_GET
залежить від того, який тип операції виконується. Операцію, яка змінює оброблювані дані з сервера, слід проводити через POST-запит, а інші операції - через GET-запит. Щоб зробити приклад, операція, яка видаляє обліковий запис користувача, не повинна виконуватися безпосередньо після того, як користувач натисне на посилання, а перегляд зображення може бути здійснено через посилання.
Я використовую це,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
Оператор підтверджує, якщо $ _REQUEST має більше одного параметра (перший параметр у $ _REQUEST буде урі-запитом, який можна використовувати при необхідності, деякі пакети PHP не повертають $ _GET, тому перевірте, чи не більше 1 $ для $ _GET, за замовчуванням це буде $ _POST.
Ви передчасно оптимізуєте. Крім того, вам слід подумати над тим, чи слід GET використовувати для речей, які ви розміщуєте, з міркувань безпеки.
Це некрасиво, і я не рекомендував би його як остаточне рішення при натисканні коду в реальному часі, але, будуючи функції відпочинку, іноді зручно мати захоплювач параметрів 'catch-all':
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. Після того, як ви вирішите, що робить дана функція відпочинку, ви можете вибрати одну відповідну для цього дзвінка, щоб переконатися, що ви отримаєте те, що вам потрібно для версії розгортання. Це передбачає, що "REQUEST_METHOD" встановлено.
!isset($_REQUEST['s'])
.