Ich muss überprüfen, ob php://input
exists/isset. Funktioniert es mit PHP isset()
? Was ist der richtige Weg, um es zu überprüfen?Wie überprüft man, ob php: // Eingabe gesetzt ist?
Antwort
Sie können den Inhalt von php://input
mit file_get_contents
erhalten und den Rückgabewert überprüfen, um zu sehen, ob es tatsächlich eingestellt ist:
$input = file_get_contents("php://input");
if ($input) {
// set
}
else {
// not set
}
Versuchen Sie es mit file_get_contents()
zu testen (zum Lesen) + empty()
oder boolean conversion (zum Testen) :
<?php
$input = file_get_contents('php://input');
if ($input) {
// exists
} else {
// not exists
}
Von php.net:
Ein Strom, der mit php: // Eingang geöffnet wurde, kann nur einmal gelesen werden; Der Stream unterstützt keine Suchvorgänge. Abhängig von der Implementierung des SAPI kann es jedoch möglich sein, einen weiteren php: // - Eingabestrom zu öffnen und den Lesevorgang erneut zu starten. Dies ist nur möglich, wenn die Anfragetextdaten gespeichert wurden. In der Regel ist dies bei POST-Anfragen der Fall, jedoch nicht bei anderen Anforderungsmethoden wie PUT oder PROPFIND .
In diesem Fall lese ich Base64-Daten von einem Datei-Upload, File_get_contents nur etwas zurückgeben, wenn es eine echte Datei liest? (Ich meine, wenn der Benutzer eine gefälschte base64 sendet, nur Text, aber vorformatiert, um wie Base 64 auszusehen, aber nicht eine echte Datei, was würde aus $ Eingabe resultieren?) – sagits
@sagits ja. 'file_get_contents()' liest bei der Verwendung dieses URL-Wrappers jeden Inhalt, falls er dort ist. Unabhängig von der inhaltlichen Struktur. – BlitZ
Vielen Dank @CORRUPT, ich habe ein wenig verwirrt über Ihre Antwort, Sie meinen, dass es die falsche Basis 64 lesen kann, aber wird falsch zurückgeben, oder es würde wieder wahr? Ich habe im Funktionshandbuch gelesen, dass es falsch zurückgibt, wenn es den Inhalt nicht lesen kann. Kannst du mir das erklären? Vielen Dank für Ihre Zeit – sagits
Angenommen, Sie bekommen eine Benutzereingabe von einer POST-Anfrage Sie prüfen, ob es dies wie ein Satz ist
if(isset($_POST['var_name']))
{
//for additional checking like if it's not empty do this
if(!empty($_POST['var_name']))
{
//Do whatever you want here
}
}
'php: // input' ist wo' POST' oder 'PUT' Daten sind, nicht' GET' Parameter. – Barmar
Bearbeitete die Antwort .. Danke für die Mitteilung, dass – user2801966
Besser, obwohl es nur funktioniert, wenn die Daten ordnungsgemäß als Formulardaten formatiert sind. Normalerweise ist der Grund für die Verwendung von 'php: // input', dass Sie auf die Rohdaten zugreifen müssen. – Barmar
es true zurück, wenn die Variable existiert und es ist nicht null
$foo = 'bar';
var_dump(isset($foo)); -> true
$baz = null;
var_dump(isset($baz)); -> false
var_dump(isset($undefined)); -> false
Schauen Sie es Schrödingers Katze! Du kannst es nicht wissen bis du es öffnest! :) – Prasanth
Wenn es Standard-Web-Anfrage ist, können Sie nach $ _SERVER ['CONTENT_LENGTH'] suchen, ansonsten gibt es keinen anderen Weg. Funktionen wie fstat oder stream_get_meta_data funktionieren in diesem Fall nicht. :( – xpuu