Welcher dieser Codes wird schneller sein?
$temp = $_REQUEST['s'];
oder
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Welcher dieser Codes wird schneller sein?
$temp = $_REQUEST['s'];
oder
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Antworten:
$_REQUEST
, Standardmäßig enthält den Inhalt $_GET
, $_POST
und $_COOKIE
.
Aber es ist nur eine Standardeinstellung, die davon abhängt variables_order
; und nicht sicher, ob Sie mit Cookies arbeiten möchten.
Wenn ich mich entscheiden müsste, würde ich wahrscheinlich nicht verwenden $_REQUEST
, und ich würde wählen $_GET
oder $_POST
- je nachdem, was meine Anwendung tun soll (dh das eine oder das andere, aber nicht beide) : im Allgemeinen:
$_GET
wenn jemand Daten von Ihrer Anwendung anfordert .$_POST
wenn jemand Daten in Ihre Anwendung pusht (einfügt oder aktualisiert oder löscht) .In beiden Fällen wird es keinen großen Unterschied bei den Aufführungen geben: Der Unterschied ist vernachlässigbar im Vergleich zu dem, was der Rest Ihres Skripts tun wird.
GET vs. POST
1) Sowohl GET als auch POST erstellen ein Array (z. B. Array (Schlüssel => Wert, Schlüssel2 => Wert2, Schlüssel3 => Wert3, ...)). Dieses Array enthält Schlüssel / Wert-Paare, wobei Schlüssel die Namen der Formularsteuerelemente und Werte die Eingabedaten des Benutzers sind.
2) Sowohl GET als auch POST werden als $ _GET und $ _POST behandelt. Dies sind Superglobale, dh sie sind unabhängig vom Umfang immer verfügbar - und Sie können von jeder Funktion, Klasse oder Datei aus auf sie zugreifen, ohne etwas Besonderes tun zu müssen.
3) $ _GET ist ein Array von Variablen, die über die URL-Parameter an das aktuelle Skript übergeben werden.
4) $ _POST ist ein Array von Variablen, die über die HTTP-POST-Methode an das aktuelle Skript übergeben werden.
Wann soll GET verwendet werden?
Informationen, die von einem Formular mit der GET-Methode gesendet werden, sind für alle sichtbar (alle Variablennamen und -werte werden in der URL angezeigt). GET hat auch Grenzen für die Menge der zu sendenden Informationen. Die Beschränkung beträgt ca. 2000 Zeichen. Da die Variablen jedoch in der URL angezeigt werden, ist es möglich, die Seite mit einem Lesezeichen zu versehen. Dies kann in einigen Fällen hilfreich sein.
GET kann zum Senden nicht sensibler Daten verwendet werden.
Hinweis: GET darf NIEMALS zum Senden von Passwörtern oder anderen vertraulichen Informationen verwendet werden!
Wann wird POST verwendet?
Informationen, die von einem Formular mit der POST-Methode gesendet werden, sind für andere nicht sichtbar (alle Namen / Werte sind in den Hauptteil der HTTP-Anforderung eingebettet) und die Anzahl der zu sendenden Informationen ist unbegrenzt.
Darüber hinaus unterstützt POST erweiterte Funktionen wie die Unterstützung mehrteiliger Binäreingaben beim Hochladen von Dateien auf den Server.
Da die Variablen jedoch nicht in der URL angezeigt werden, ist es nicht möglich, die Seite mit einem Lesezeichen zu versehen.
$ _GET ruft Variablen aus dem Querystring oder Ihrer URL ab.>
$ _POST ruft Variablen aus einer POST-Methode ab, z. B. (allgemein) Formulare.
$ _REQUEST ist eine Zusammenführung von $ _GET und $ _POST, wobei $ _POST $ _GET überschreibt. Es ist gut, $ _REQUEST für selbstauffrischende Formulare zur Validierung zu verwenden.
GET
von der Abfragezeichenfolge, POST
von der Formularübermittlung).
Ich würde vorschlagen, $_POST
und $_GET
explizit zu verwenden.
Die Verwendung von $ _REQUEST sollte bei ordnungsgemäßem Site-Design ohnehin unnötig sein und einige Nachteile mit sich bringen, z. B. die Offenheit für einfachere CSRF/XSS
Angriffe und andere Dummheiten, die durch das Speichern von Daten in der URL entstehen.
Der Geschwindigkeitsunterschied sollte in beiden Fällen minimal sein.
Verwenden Sie REQUEST. Niemand kümmert sich um die Geschwindigkeit einer so einfachen Operation, und es ist viel sauberer Code.
$_REQUEST
ist die Verwendung die falsche Schlussfolgerung. Siehe meine Antwort.
Mach dir keine Sorgen. Sie sollten jedoch weiterhin die zweite Lösung verwenden (plus eine zusätzliche Überprüfung für keine dieser vorhandenen Variablen), da Sicherheitsprobleme mit auftreten$_REQUEST
(da $_GET
und $_POST
nicht die einzigen Quellen für dieses Array sind).
$_REQUEST
Ich glaube, es gab einen Beitrag über die Probleme mit gestern. Lass es mich finden.
EDIT : Na ja , nicht direkt ein Beitrag, aber hier ist es trotzdem: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Verwenden Sie das, weil es sicherer ist und keinen merklichen Geschwindigkeitsunterschied macht
$_REQUEST
dem gleichen Skript verbunden sind , ermöglicht aber dennoch den Zugriff auf dasselbe Skript (in meinem Fall wird dasselbe Skript mit verschiedenen 'Aktionen' verwendet, und manchmal wäre $ _GET in Ordnung, aber manchmal benötige ich $ _POST zum Ausblenden / Sichern der Daten).
Es gibt bestimmte Sicherheitsbedenken, da ein Hacker ein Cookie setzen kann, das einen Wert von $ _POST oder $ _GET überschreibt. Wenn Sie mit vertraulichen Daten umgehen, würde ich die Verwendung von $ _REQUEST nicht empfehlen. - Xandor
Sie können in einigen Fällen nicht als $_GET
Alternative verwendet $_POST
werden.
Wann ??
GET
Außerdem sind die zu sendenden Informationen begrenzt. Die Beschränkung beträgt ca. 2000 Zeichen.
Andere Dinge gibt es nur wenige Fälle, in denen Sie keine Daten mit abrufen können $_POST
Wann ?
Für den Rest Service
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
Es ist nichts falsch zu benutzen $_REQUEST
.
Der Weg, dies zu tun, besteht darin, $ _SERVER ['REQUEST_METHOD'] explizit zu überprüfen und sich nicht darauf zu verlassen, dass $ _POST für ein GET leer ist.
$_SERVER['REQUEST_METHOD']
, um zu überprüfen, ob das Skript mit einem der beiden aufgerufen wird. Aber zu sagen, dass nichts falsch $_REQUEST
ist, ist nicht 100% wahr. Es gibt bestimmte Sicherheitsbedenken, da ein Hacker ein Cookie setzen kann, das einen Wert von $ _POST oder $ _GET überschreibt. Wenn Sie mit sensiblen Daten umgehen, würde ich die Verwendung nicht empfehlen $_REQUEST
.
$ _GET ruft Variablen aus dem Querystring oder Ihrer URL ab.>
$ _POST ruft Variablen aus einer POST-Methode ab, z. B. (allgemein) Formulare.
$ _REQUEST ist eine Zusammenführung von $ _GET und $ _POST, wobei $ _POST $ _GET überschreibt. Es ist gut, $ _REQUEST für selbstauffrischende Formulare zur Validierung zu verwenden.
request_order
Cookie-Werten ab und kann diese auch enthalten, weshalb es keine sehr zuverlässige oder nützliche Funktion ist.
Ich würde die zweite Methode verwenden, da sie expliziter ist. Ansonsten wissen Sie nicht, woher die Variablen kommen.
Warum müssen Sie GET und POST überhaupt überprüfen? Sicherlich macht die Verwendung des einen oder anderen nur mehr Sinn.
GET
da es nur für ein Element (z. B. Verschieben) und POST
für mehrere Elemente (ein Formular mit Kontrollkästchen ...) verwendet wurde.
Ich benutze immer nur _GET oder _POST. Ich habe lieber die Kontrolle.
Was mir an beiden Codefragmenten im OP nicht gefällt, ist, dass sie die Informationen verwerfen, für die die HTTP-Methode verwendet wurde. Und diese Informationen sind wichtig für die Desinfektion von Eingaben.
Wenn ein Skript beispielsweise Daten aus einem Formular akzeptiert, das in die Datenbank eingegeben werden soll, sollte das Formular besser POST verwenden ( verwenden Sie GET nur für idempotente Aktionen ). Wenn das Skript die Eingabedaten jedoch über die GET-Methode empfängt, sollte es (normalerweise) abgelehnt werden. Für mich könnte eine solche Situation das Schreiben einer Sicherheitsverletzung in das Fehlerprotokoll rechtfertigen, da dies ein Zeichen dafür ist, dass jemand etwas anprobiert.
Mit beiden Codefragmenten im OP wäre diese Bereinigung nicht möglich.
$_POST
ist, zu verhindern, dass Suchmaschinen-Crawler so etwas tun: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Ich würde verwenden $_POST
, und $_GET
weil anders von $_REQUEST
ihrem Inhalt nicht beeinflusst wird variables_order
.
Wann zu verwenden $_POST
und $_GET
hängt davon ab, welche Art von Operation ausgeführt wird. Ein Vorgang, der die vom Server verarbeiteten Daten ändert, sollte über eine POST-Anforderung ausgeführt werden, während die anderen Vorgänge über eine GET-Anforderung ausgeführt werden sollten. Beispielsweise sollte ein Vorgang zum Löschen eines Benutzerkontos nicht direkt ausgeführt werden, nachdem der Benutzer auf einen Link geklickt hat, während das Anzeigen eines Bildes über einen Link erfolgen kann.
Ich benutze das,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
Die Anweisung überprüft, ob $ _REQUEST mehr als einen Parameter hat (der erste Parameter in $ _REQUEST ist die Anforderungs-URL, die bei Bedarf verwendet werden kann. Einige PHP-Pakete geben $ _GET nicht zurück. Überprüfen Sie daher, ob mehr als 1 für $ _GET, By verwendet werden Standardmäßig ist es $ _POST.
Sie optimieren vorzeitig. Außerdem sollten Sie sich aus Sicherheitsgründen wirklich überlegen, ob GET für POST-fähige Dinge verwendet werden soll.
Es ist hässlich und ich würde es nicht als endgültige Lösung empfehlen, wenn Code live übertragen wird, aber beim Erstellen von Restfunktionen ist es manchmal praktisch, einen "catch-all" -Parameter-Grabber zu haben:
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;
}
Jemand, der kreativ ist, könnte es wahrscheinlich sogar hinzufügen, um Befehlszeilenparameter oder was auch immer von Ihrer IDE kommt, zu verarbeiten. Sobald Sie entschieden haben, was eine bestimmte Ruhefunktion tut, können Sie eine für diesen bestimmten Aufruf geeignete auswählen, um sicherzustellen, dass Sie das erhalten, was Sie für die Bereitstellungsversion benötigen. Dies setzt voraus, dass 'REQUEST_METHOD' gesetzt ist.
!isset($_REQUEST['s'])
.