Quale di questi codici sarà più veloce?
$temp = $_REQUEST['s'];
o
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Quale di questi codici sarà più veloce?
$temp = $_REQUEST['s'];
o
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Risposte:
$_REQUEST
, Per impostazione predefinita, contiene i contenuti di $_GET
, $_POST
e $_COOKIE
.
Ma è solo un valore predefinito, che dipende da variables_order
; e non sei sicuro di voler lavorare con i cookie.
Se dovessi scegliere, probabilmente non userei $_REQUEST
, e sceglierei $_GET
o $_POST
- a seconda di cosa dovrebbe fare la mia applicazione (cioè l'uno o l'altro, ma non entrambi) : in generale:
$_GET
quando qualcuno richiede dati dalla propria applicazione.$_POST
quando qualcuno sta spingendo (inserendo o aggiornando o eliminando) i dati nella tua applicazione.Ad ogni modo, non ci sarà molta differenza nelle performance: la differenza sarà trascurabile, rispetto a ciò che farà il resto della tua sceneggiatura.
OTTIENI vs. POST
1) Sia GET che POST creano un array (ad es. Array (key => value, key2 => value2, key3 => value3, ...)). Questo array contiene coppie chiave / valore, in cui le chiavi sono i nomi dei controlli del modulo e i valori sono i dati di input dell'utente.
2) Sia GET che POST sono trattati come $ _GET e $ _POST. Questi sono superglobali, il che significa che sono sempre accessibili, indipendentemente dall'ambito - e puoi accedervi da qualsiasi funzione, classe o file senza dover fare nulla di speciale.
3) $ _GET è una matrice di variabili passate allo script corrente tramite i parametri URL.
4) $ _POST è una matrice di variabili passate allo script corrente tramite il metodo POST HTTP.
Quando usare GET?
Le informazioni inviate da un modulo con il metodo GET sono visibili a tutti (tutti i nomi e i valori delle variabili sono visualizzati nell'URL). GET ha anche dei limiti sulla quantità di informazioni da inviare. La limitazione è di circa 2000 caratteri. Tuttavia, poiché le variabili sono visualizzate nell'URL, è possibile aggiungere la pagina ai segnalibri. Questo può essere utile in alcuni casi.
GET può essere utilizzato per l'invio di dati non sensibili.
Nota: GET non deve MAI essere usato per inviare password o altre informazioni sensibili!
Quando utilizzare POST?
Le informazioni inviate da un modulo con il metodo POST sono invisibili agli altri (tutti i nomi / valori sono incorporati nel corpo della richiesta HTTP) e non hanno limiti sulla quantità di informazioni da inviare.
Inoltre, POST supporta funzionalità avanzate come il supporto per l'input binario multiparte durante il caricamento di file sul server.
Tuttavia, poiché le variabili non sono visualizzate nell'URL, non è possibile aggiungere la pagina ai segnalibri.
$ _GET recupera le variabili dalla stringa di query o dal tuo URL.>
$ _POST recupera le variabili da un metodo POST, come i moduli (generalmente).
$ _REQUEST è una fusione di $ _GET e $ _POST in cui $ _POST sovrascrive $ _GET. Buono a usare $ _REQUEST su moduli autoreferenziali per validazioni.
GET
dalla stringa di query, POST
dall'invio del modulo).
Suggerirei di usare $_POST
ed $_GET
esplicitamente.
L'uso di $ _REQUEST non dovrebbe essere necessario con la corretta progettazione del sito, e presenta alcuni aspetti negativi come lasciarti aperto ad CSRF/XSS
attacchi più facili e altre sciocchezze che derivano dalla memorizzazione dei dati nell'URL.
La differenza di velocità dovrebbe essere minima in entrambi i modi.
Usa la RICHIESTA. A nessuno importa della velocità di un'operazione così semplice, ed è un codice molto più pulito.
$_REQUEST
è una conclusione sbagliata. Vedi la mia risposta
Non ti preoccupare. Ma dovresti comunque usare la seconda soluzione (più un controllo extra per nessuna di quelle variabili esistenti), perché ci sono problemi di sicurezza con $_REQUEST
(poiché $_GET
e $_POST
non sono le uniche fonti per quell'array).
$_REQUEST
Credo che ci sia stato un post sui problemi di ieri. Lasciami andare a trovarlo.
EDIT : Oh bene, non direttamente un post, ma eccolo qui: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Usalo perché è più sicuro e non farà una notevole differenza di velocità
$_REQUEST
ma consente comunque di accedere allo stesso script in entrambi i modi (nel mio caso, lo stesso script viene utilizzato con diverse 'azioni' e alcune volte $ _GET andrebbe bene, ma altre volte ho bisogno di $ _POST per nascondere / proteggere i dati).
Vi sono alcuni problemi di sicurezza in quanto un hacker può impostare un cookie che sovrascriverà un valore $ _POST o $ _GET. Se gestisci dati sensibili, non consiglierei di utilizzare $ _REQUEST. - Xandor
non puoi essere usato $_GET
alternativa a$_POST
in alcuni casi.
Quando ??
GET
ha anche dei limiti sulla quantità di informazioni da inviare. La limitazione è di circa 2000 caratteri.
Altre cose ci sono pochi casi in cui non è possibile recuperare un dato utilizzando $_POST
Quando ?
Per il servizio di riposo
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
non c'è niente di sbagliato da usare $_REQUEST
.
Ma il modo per farlo è controllare esplicitamente $ _SERVER ['REQUEST_METHOD'], non fare affidamento sul fatto che $ _POST sia vuoto per un GET.
$_SERVER['REQUEST_METHOD']
per verificare se lo script verrà chiamato con uno dei due. Ma dire che non c'è nulla di sbagliato $_REQUEST
non è vero al 100%. Vi sono alcuni problemi di sicurezza in quanto un hacker può impostare un cookie che sovrascriverà un valore $ _POST o $ _GET. Se gestisci dati sensibili, non consiglierei di usarli $_REQUEST
.
$ _GET recupera le variabili dalla stringa di query o dal tuo URL.>
$ _POST recupera le variabili da un metodo POST, come i moduli (generalmente).
$ _REQUEST è una fusione di $ _GET e $ _POST in cui $ _POST sovrascrive $ _GET. Buono a usare $ _REQUEST su moduli autoreferenziali per validazioni.
request_order
e può contenere anche valori di cookie, motivo per cui non è una funzionalità molto affidabile né utile.
Vorrei utilizzare il secondo metodo in quanto è più esplicito. Altrimenti non sai da dove provengono le variabili.
Perché è necessario controllare sia GET che POST? Sicuramente usare l'uno o l'altro ha solo più senso.
GET
essendo stato utilizzato solo per un elemento (ad es. Spostandolo) e POST
per più di essi (un modulo con caselle di controllo ...).
Uso sempre _GET o _POST. Preferisco avere il controllo.
Quello che non mi piace di entrambi i frammenti di codice nell'OP è che scartano le informazioni su cui è stato utilizzato il metodo HTTP. E queste informazioni sono importanti per la sanificazione dell'input.
Ad esempio, se uno script accetta dati da un modulo che verrà immesso nel database, il modulo dovrebbe utilizzare meglio POST ( utilizzare GET solo per azioni idempotenti ). Ma se lo script riceve i dati di input tramite il metodo GET, dovrebbe (normalmente) essere rifiutato. Per me, una situazione del genere potrebbe giustificare la scrittura di una violazione della sicurezza nel registro degli errori, poiché è un segno sul quale qualcuno sta provando qualcosa.
Con entrambi i frammenti di codice nel PO, questa sanificazione non sarebbe possibile.
$_POST
sia quello di impedire ai crawler dei motori di ricerca di fare qualcosa del genere: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Vorrei usare $_POST
, e $_GET
perché diversamente dal $_REQUEST
loro contenuto non è influenzato variables_order
.
Quando utilizzare $_POST
e $_GET
dipende dal tipo di operazione che viene eseguita. Un'operazione che modifica i dati gestiti dal server deve essere eseguita tramite una richiesta POST, mentre le altre operazioni devono essere eseguite tramite una richiesta GET. Per fare un esempio, un'operazione che elimina un account utente non deve essere eseguita direttamente dopo che l'utente ha fatto clic su un collegamento, mentre è possibile visualizzare un'immagine tramite un collegamento.
Io lo uso
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
l'istruzione viene convalidata se $ _REQUEST ha più di un parametro (il primo parametro in $ _REQUEST sarà l'uri di richiesta che può essere utilizzato quando necessario, alcuni pacchetti PHP non restituiranno $ _GET, quindi controlla se i suoi più di 1 vanno per $ _GET, per predefinito, sarà $ _POST.
Stai ottimizzando prematuramente. Inoltre, dovresti davvero riflettere sul fatto che GET debba essere usato per cose che stai postando, per motivi di sicurezza.
È brutto e non lo consiglierei come soluzione finale quando si spinge il codice in diretta, ma durante la creazione di funzioni di riposo, a volte è utile avere un accaparratore di parametri "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;
}
Qualcuno potrebbe probabilmente aggiungerlo ad esso per gestire i parametri della riga di comando o qualunque cosa provenga dal tuo IDE. Una volta deciso cosa sta facendo una determinata funzione di riposo, puoi sceglierne una appropriata per quella determinata chiamata per assicurarti di ottenere ciò di cui hai bisogno per la versione di distribuzione. Ciò presuppone che sia impostato "REQUEST_METHOD".
!isset($_REQUEST['s'])
.