Ich habe vorhandenen Produktions-PHP-Code, der ein JSON-Web-Token (in Form einer Zeichenfolge) aus einer JSON-Anfrage extrahiert, in der der Inhaltstyp angegeben ist Die Anfrage vom Client lautet application/json. Der folgende Code extrahiert die Zeichenfolge mit php://input, was funktioniert, solange der Inhaltstyp der Anfrage application/json ist.
Code: Select all
$jsonString = file_get_contents('php://input');
$jsonArray = json_decode($jsonString, true);
$jwt =$jsonArray['jwt'];
var_dump($jwt); //THIS IS FOR DEBUGGING. COMMENTED OUT IN PRODUCTION
Code: Select all
string(414) "hlMox0-LOTS OF CHARACTERS-za2b"
Diese JSON-Web-Token-Zeichenfolge kann erfolgreich dekodiert werden, um den Benutzer zu authentifizieren.
Ich muss jetzt den Code für einen anderen Endpunkt für Client-Anfragen schreiben, der es dem Client ermöglicht, eine Bilddatei und Metadaten zu senden. In diesem Fall muss der Benutzer/Client zur Unterstützung der Dateiübertragung in der Anfrage content-type multipart/form-data angeben. Allerdings funktioniert php/input nicht mit mehrteiligen Daten und die einzige Möglichkeit, die Metadaten abzurufen, ist die Variable $_POST. In diesem Fall wird die resultierende Zeichenfolge, wenn sie mit var_dump() extrahiert und angezeigt wird, von var_dump als optional gekennzeichnet.
Code: Select all
$jwt = $_POST['jwt'];
var_dump($jwt);
Code: Select all
"Optional(414)("hlMox0-LOTS OF CHARACTERS-za2b")";
Obwohl diese Zeichenfolge bei der Wiedergabe mit der obigen identisch erscheint, kann ich diese Variable nicht dekodieren. Var_dump legt nahe, dass die Zeichenfolgen zwar das gleiche Echo haben, aber unterschiedlich sind. Die zweite Version ist eine „optionale“. Für diejenigen, die mit dem Begriff optional nicht vertraut sind: Er wird in vielen Programmiersprachen verwendet, um eine Variable zu bezeichnen, die explizit entweder einen Nullwert haben kann oder nicht. Offensichtlich erkennt PHP diese Idee mit der Funktion var_dump. Allerdings kann ich in der Dokumentation nichts weiterführendes dazu finden.
Warum sollte sich ein String, auf den über die Variable $_POST zugegriffen wird, von einem String unterscheiden, auf den über php://input zugegriffen wird? ?
Insofern var-dump einen Unterschied zwischen optional und string identifiziert, warum sollte der Zugriff auf die Daten über $_POST ein optionales anstelle eines Strings ergeben?
Letztendlich: Wie Kann ich den von $_POST erhaltenen $_POST['jwt'] in eine gewöhnliche Zeichenfolge konvertieren? Was könnte daran falsch sein?