PHP 8.4 wurde im November veröffentlicht, und Sie und Ihr Team haben keinen Zweifel Ich habe hart daran gearbeitet, die neuen Funktionen, veralteten Elemente usw. zu verstehen Änderungen, die diese neueste Version der Sprache begleiten. Das enthält Änderungen an Nicht-POST-HTTP-Verben.
In diesem Blog gehe ich Durch den Hintergrund von HTTP-Verben in PHP wird erklärt, warum HTTP Änderungen an Verben in PHP 8.4 sind von Bedeutung. Anschließend stelle ich einen Leitfaden für Entwickler zur Verfügung als Referenz bei der Implementierung dieser Änderungen in ihrem Code.
PHP wurde mit Blick auf das Web entwickelt und unterstützte die Formularverarbeitung früheste Tage. Ursprünglich gab es in HTTP im Wesentlichen nur zwei Methoden, über die ein Browser eine Webseite anfordern könnte: per GET oder POST. Während HTML-Formulare immer noch nur diese beiden Methoden wirklich unterstützen, JavaScript kann HTTP-Anfragen mit jeder HTTP-Methode senden. und eine Reihe von Toolkits (z. B. HTMX) können dies sogar für Entwickler nahtlos bewältigen.
Eine GET-Anfrage übergibt Formulardaten über die Abfragezeichenfolge der URL. Dies bedeutet, dass die Formularergebnisse mit Lesezeichen versehen, wiederholt und sogar gespeichert werden können zwischengespeichert. Aus diesem Grund werden GET-Anfragen üblicherweise nur für Aktionen verwendet die den Status anfordern, ohne den Status zu ändern: Suchanfragen, Ergebnis Sortierung, Ergebnisfilterung, Paginierung usw.
Wenn Sie eine Leistung erbringen möchten eine Aktion, die Änderungen innerhalb einer Anwendung vornehmen könnte – z. B. Bearbeiten eines Warenkorbs, Senden einer Support-Nachricht, Hochladen einer Bild usw. – Sie verwenden die POST-HTTP-Methode. POST-Anfragen sind gelten als nicht idempotent, was bedeutet, dass sie nicht zwischengespeichert werden können und dies auch nicht tun sollten wiederholt werden, da sie Nebenwirkungen haben. Diese Auswirkungen können Einfügungen, Änderungen oder Löschungen in einer Datenbank, Dateisystemvorgänge, Webanfragen oder etwas anderes bedeuten.
In Um die Verarbeitung von Formulardaten zu automatisieren, bietet PHP mehrere superglobale Variablen, die aus der eingehenden Anfrage gefüllt werden. $_GET wird mit URL-Abfragezeichenfolgenargumenten gefüllt und kann von jeder Anforderungsmethode aus gefüllt werden. $_POST wird jedoch nur aus dem Hauptteil von POST-Anfragen gefüllt, die mit dem Inhaltstyp application/x-www-form-urlencoded erstellt wurden, was etwa so aussehen könnte:
title=HTTP Verbs Changes in PHP 8.4&url=https://example.org/blog/php-8.4-http-verbs&author=Just Some Guy&tags[0]=php&tags[1]=http
PHP wird es tun Nehmen Sie das und füllen Sie das Superglobal $_POST so auf, dass es wie folgt aussieht:
<?php $_POST = [ 'title' => 'HTTP Verbs Changes in PHP 8.4', 'url' => 'https://example.org/blog/php-8.4-http-verbs', 'author' => 'Just Some Guy', 'tags' => ['php', 'http'], ];
Die Tatsache, dass PHP dies hinter den Kulissen tut Sie sind Teil dessen, was das Erlernen und den Einstieg in PHP so einfach macht.
Darüber hinaus kann es auch den Inhaltstyp multipart/form-data verarbeiten, der es einem Browser ermöglicht, neben der Bereitstellung von Formulardaten auch Dateien hochzuladen. Dabei werden zusätzliche $_FILES aufgefüllt superglobal, das Informationen zu den hochgeladenen Dateien bereitstellt; Entwickler können diese Dateien dann vor dem Speichern validieren und vorverarbeiten sie an einem festen Ort.
Es gibt viel mehr HTTP-Methoden als GET und POST und Entwickler für das Web Oft möchten Sie verschiedene Methoden wählen, um den Kontext für das bereitzustellen, was Sie versuchen Folgendes zu tun:
Während Browser unterstützen diese (noch!) nicht nativ, viele JavaScript-Frameworks und -Bibliotheken schon.
Aber Es gibt einen Haken: PHP verarbeitet diese Anfragen nicht automatisch. In Tatsächlich müssen Sie das Parsen dieser Daten vollständig selbst übernehmen kann äußerst problematisch sein, wenn Sie auch mit Datei-Uploads beginnen sowie Formulardaten. (Rollen Sie niemals Ihre eigenen Parser!)
PHP 8.4 führt die Methode request_parse_body() ein:
title=HTTP Verbs Changes in PHP 8.4&url=https://example.org/blog/php-8.4-http-verbs&author=Just Some Guy&tags[0]=php&tags[1]=http
Die
Die Funktion analysiert die eingehende Anfrage auf die gleiche Weise wie immer
für POST-Anfragen, ermöglicht Ihnen jedoch die Angabe alternativer Variablen für
Speichern Sie die Formulardaten und Datei-Uploads in (oder überschreiben Sie die Superglobals,
wenn Sie es vorziehen). Sie können das Verhalten des Parsers auch über das Argument $options ändern, mehr dazu weiter unten.
Ein häufiges Muster wird wahrscheinlich sein:
<?php $_POST = [ 'title' => 'HTTP Verbs Changes in PHP 8.4', 'url' => 'https://example.org/blog/php-8.4-http-verbs', 'author' => 'Just Some Guy', 'tags' => ['php', 'http'], ];
(Obwohl Sie Wenn Sie ein Framework verwenden, erwarten Sie, dass das Framework sich um dieses Detail für Sie kümmert.)
Das ist buchstäblich die Gesamtheit des Features. Eine einfach bereitzustellende Funktion schlüsselfertiges Verhalten, mit dem Sie als PHP-Entwickler bereits vertraut sind. Es Viel besser geht es nicht!
Jetzt dass wir die Änderungen an HTTP-Verben in PHP 8.4 besprochen haben, lassen Sie uns Sehen Sie sich einige Beispiele an, wie Sie diese nutzen und anwenden können Aktualisierungen in Ihrem Code.
Genau wie POST-Anfragen analysiert request_parse_body() nur Anfragen mit dem folgenden Inhalt Typen:
Bei application/x-www- form-urlencoded, das $_FILES-Äquivalent Das Array (Index 1 im zurückgegebenen Array) ist leer. Wenn der Inhalt Wenn der Typ nicht unterstützt wird, löst die Funktion eine InvalidArgumentException aus.
PHP ermöglicht Ihnen die Überprüfung des Rohinhalts der Anfrage über den php://input-Stream. Dabei handelt es sich um einen gepufferten Stream, der (ab PHP 7.4) mehrfach gelesen werden kann. Allerdings beim Empfang von Multipart-/Formulardaten Inhalt wird PHP aus einem sehr guten Grund etwas destruktiv: Pufferung Dateien könnten dazu führen, dass der Dateiinhalt zweimal auf die Festplatte geschrieben wird, Dies führt zu mehr Arbeitsspeicher, Speicherplatz und E/A-Nutzung.
Daher DARF request_parse_body() NICHT zweimal aufgerufen werden, da es php://input destruktiv verbraucht.
Der $options-Parameter für request_parse_body() ermöglicht es Ihnen, sein Verhalten zur Laufzeit zu ändern, anstatt sich auf fest codierte Parameter zu verlassen php.ini-Konfiguration.
Das obige ist der detaillierte Inhalt vonÄnderungen an HTTP-Verben in PHP 8.4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!