2013-09-25 11 views
10

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?

+0

Schauen Sie es Schrödingers Katze! Du kannst es nicht wissen bis du es öffnest! :) – Prasanth

+0

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

Antwort

2

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 
} 
+0

'isset()' wird in diesem Szenario immer true zurückgeben, '' empty() 'verwenden oder diese Bedingung einfach loswerden. – SamT

+0

' file_get_contents() 'gibt String bei Erfolg zurück. – BlitZ

+0

@SamT: Ich denke, es ist ein gute Idee, um zu überprüfen, ob '$ input'' 'TRUE' ist. –

9

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 .

+0

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

+0

@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

+0

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

-2

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 
     } 
} 
+2

'php: // input' ist wo' POST' oder 'PUT' Daten sind, nicht' GET' Parameter. – Barmar

+0

Bearbeitete die Antwort .. Danke für die Mitteilung, dass – user2801966

+0

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

1

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 
Verwandte Themen