Który z tych kodów będzie szybszy?
$temp = $_REQUEST['s'];
lub
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Który z tych kodów będzie szybszy?
$temp = $_REQUEST['s'];
lub
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Odpowiedzi:
$_REQUEST
Domyślnie zawiera zawartość $_GET
, $_POST
i $_COOKIE
.
Ale to tylko wartość domyślna, która zależy od variables_order
; i nie jesteś pewien, czy chcesz pracować z plikami cookie.
Gdybym miał wybierać, pewnie bym nie używał $_REQUEST
, a wybrałbym $_GET
lub $_POST
- w zależności od tego, co ma robić moja aplikacja (tj. Jedną lub drugą, ale nie obie) : ogólnie mówiąc:
$_GET
gdy ktoś żąda danych z Twojej aplikacji.$_POST
gdy ktoś wypycha (wstawia, aktualizuje lub usuwa) dane do twojej aplikacji.Tak czy inaczej, nie będzie dużej różnicy w wydajności: różnica będzie znikoma w porównaniu z tym, co zrobi reszta twojego skryptu.
GET a POST
1) GET i POST tworzą tablicę (np. Array (klucz => wartość, klucz2 => wartość2, klucz3 => wartość3, ...)). Ta tablica zawiera pary klucz / wartość, gdzie klucze to nazwy kontrolek formularza, a wartości to dane wejściowe od użytkownika.
2) Zarówno GET, jak i POST są traktowane jako $ _GET i $ _POST. Są to superglobale, co oznacza, że są zawsze dostępne, niezależnie od zakresu - i można uzyskać do nich dostęp z dowolnej funkcji, klasy lub pliku bez konieczności wykonywania jakichkolwiek czynności specjalnych.
3) $ _GET to tablica zmiennych przekazywana do bieżącego skryptu przez parametry adresu URL.
4) $ _POST to tablica zmiennych przekazywana do bieżącego skryptu za pomocą metody HTTP POST.
Kiedy używać GET?
Informacje wysyłane z formularza metodą GET są widoczne dla każdego (wszystkie nazwy i wartości zmiennych wyświetlane są w adresie URL). GET ma również ograniczenia ilości wysyłanych informacji. Ograniczenie to około 2000 znaków. Ponieważ jednak zmienne są wyświetlane w adresie URL, można dodać stronę do zakładek. Może to być przydatne w niektórych przypadkach.
GET może służyć do wysyłania danych niewrażliwych.
Uwaga: GET NIGDY nie powinien być używany do wysyłania haseł lub innych poufnych informacji!
Kiedy używać POST?
Informacje wysyłane z formularza metodą POST są niewidoczne dla innych (wszystkie nazwy / wartości są osadzone w treści żądania HTTP) i nie mają ograniczeń co do ilości wysyłanych informacji.
Ponadto POST obsługuje zaawansowane funkcje, takie jak obsługa wieloczęściowego wejścia binarnego podczas przesyłania plików na serwer.
Jednak ponieważ zmienne nie są wyświetlane w adresie URL, nie można dodać strony do zakładek.
$ _GET pobiera zmienne z zapytania lub adresu URL.>
$ _POST pobiera zmienne z metody POST, takie jak (ogólnie) formularze.
$ _REQUEST jest połączeniem $ _GET i $ _POST, gdzie $ _POST zastępuje $ _GET. Dobrze jest używać $ _REQUEST na formularzach referencyjnych do walidacji.
GET
z ciągu zapytania, POST
z przesłania formularza).
Sugerowałbym użycie $_POST
i $_GET
wyraźnie.
Używanie $ _REQUEST powinno i tak być niepotrzebne przy odpowiednim zaprojektowaniu witryny, a ma pewne wady, takie jak pozostawienie cię otwartego na łatwiejsze CSRF/XSS
ataki i inne głupoty wynikające z przechowywania danych w adresie URL.
Różnica prędkości w obu przypadkach powinna być minimalna.
Użyj REQUEST. Nikt nie dba o szybkość tak prostej operacji, a jest to znacznie czystszy kod.
$_REQUEST
jest złym wnioskiem. Zobacz moją odpowiedź.
Nie martw się. Ale nadal powinieneś używać drugiego rozwiązania (plus dodatkowe sprawdzenie, czy żadna z tych zmiennych nie istnieje), ponieważ występują problemy z bezpieczeństwem $_REQUEST
(ponieważ $_GET
i $_POST
nie są jedynymi źródłami dla tej tablicy).
Wydaje mi się, że pojawił się post o problemach z $_REQUEST
wczoraj. Pozwól mi to znaleźć.
EDYCJA : No cóż, nie bezpośrednio post, ale tutaj jest tak: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Użyj tego, ponieważ jest bezpieczniejszy i nie spowoduje zauważalnej różnicy prędkości
$_REQUEST
ale nadal umożliwia dostęp do tego samego skryptu w obie strony (w moim przypadku ten sam skrypt jest używany z różnymi 'akcjami' i czasami $ _GET byłoby w porządku, ale innym razem potrzebuję $ _POST, aby ukryć / zabezpieczyć dane).
Istnieją pewne obawy związane z bezpieczeństwem, ponieważ haker może ustawić plik cookie, który zastąpi wartość $ _POST lub $ _GET. Jeśli masz do czynienia z poufnymi danymi, nie polecam używania $ _REQUEST. - Xandor
nie można użyć $_GET
alternatywy $_POST
w niektórych przypadkach.
Kiedy ??
GET
ma również ograniczenia dotyczące ilości przesyłanych informacji. Ograniczenie to około 2000 znaków.
Inną rzeczą jest to, że jest kilka przypadków, w których nie można odzyskać danych za pomocą $_POST
Kiedy ?
Do usługi odpoczynku
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
nie ma nic złego w użyciu $_REQUEST
.
Ale sposobem na to jest jawne sprawdzenie $ _SERVER ['REQUEST_METHOD'], a nie poleganie na tym, że $ _POST jest puste dla GET.
$_SERVER['REQUEST_METHOD']
do sprawdzania, czy skrypt zostanie wywołany z którymkolwiek z nich. Ale stwierdzenie, że nic się nie dzieje, $_REQUEST
nie jest w 100% prawdziwe. Istnieją pewne obawy dotyczące bezpieczeństwa, ponieważ haker może ustawić plik cookie, który zastąpi wartość $ _POST lub $ _GET. Jeśli masz do czynienia z poufnymi danymi, nie polecam używania $_REQUEST
.
$ _GET pobiera zmienne z zapytania lub adresu URL.>
$ _POST pobiera zmienne z metody POST, takie jak (ogólnie) formularze.
$ _REQUEST jest połączeniem $ _GET i $ _POST, gdzie $ _POST zastępuje $ _GET. Dobrze jest używać $ _REQUEST na formularzach referencyjnych do walidacji.
request_order
wartości plików cookie i może również zawierać wartości cookie, dlatego nie jest to bardzo niezawodna ani użyteczna funkcja.
Użyłbym drugiej metody, ponieważ jest bardziej wyraźna. W przeciwnym razie nie wiesz, skąd pochodzą zmienne.
Dlaczego mimo wszystko musisz sprawdzić zarówno GET, jak i POST? Z pewnością użycie jednego lub drugiego ma więcej sensu.
GET
użyciem tylko jednego elementu (np. Przenoszenie go) i POST
wielu z nich (formularz z polami wyboru ...).
Zawsze używam tylko _GET lub _POST. Wolę mieć kontrolę.
To, co mi się nie podoba w żadnym fragmencie kodu w OP, to to, że odrzucają informacje o tym, która metoda HTTP została użyta. Ta informacja jest ważna dla oczyszczania wkładu.
Na przykład, jeśli skrypt akceptuje dane z formularza, który ma zostać wprowadzony do bazy danych, formularz powinien lepiej używać POST ( używaj GET tylko dla idempotentnych akcji ). Ale jeśli skrypt otrzymuje dane wejściowe metodą GET, to powinien (normalnie) zostać odrzucony. Dla mnie taka sytuacja może uzasadniać zapisanie naruszenia bezpieczeństwa w dzienniku błędów, ponieważ jest to znak, że ktoś coś przymierza.
Z którymkolwiek fragmentem kodu w OP ta sanityzacja nie byłaby możliwa.
$_POST
jest uniemożliwienie robotom wyszukiwarek ze robi coś takiego: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Skorzystałbym $_POST
, a $_GET
ponieważ inaczej na $_REQUEST
ich zawartość nie ma wpływu variables_order
.
Kiedy używać $_POST
i $_GET
zależy od rodzaju wykonywanej operacji. Operacja zmieniająca dane obsługiwane z serwera powinna być wykonywana przez żądanie POST, podczas gdy inne operacje powinny być wykonywane przez żądanie GET. Na przykład operacja, która usuwa konto użytkownika, nie powinna być wykonywana bezpośrednio po kliknięciu przez użytkownika łącza, podczas gdy przeglądanie obrazu można wykonać za pośrednictwem łącza.
Używam tego,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
instrukcja sprawdza, czy $ _REQUEST ma więcej niż jeden parametr (pierwszym parametrem w $ _REQUEST będzie adres Uri żądania, którego można użyć w razie potrzeby, niektóre pakiety PHP nie zwracają $ _GET, więc sprawdź, czy jest więcej niż 1 dla $ _GET, By domyślnie będzie to _POST $.
Optymalizujesz przedwcześnie. Ponadto, ze względów bezpieczeństwa, naprawdę powinieneś się zastanowić, czy GET powinien być używany do publikowania treści.
Jest brzydki i nie polecałbym go jako ostatecznego rozwiązania podczas wypychania kodu na żywo, ale podczas budowania funkcji reszt czasami przydatne jest posiadanie przechwytywacza parametrów `` 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;
}
Ktoś mógłby prawdopodobnie dodać coś do tego, aby obsłużyć parametry wiersza poleceń lub cokolwiek pochodzi z twojego IDE. Gdy już zdecydujesz, co robi dana funkcja odpoczynku, możesz wybrać odpowiednią dla tego wywołania, aby upewnić się, że otrzymasz to, czego potrzebujesz do wersji wdrożeniowej. Zakłada się, że ustawiono „REQUEST_METHOD”.
!isset($_REQUEST['s'])
.