2013-09-25 46 views
10

Muszę sprawdzić, czy istnieje/jest ustawiony php://input. Czy to działa z php isset()? Jaki jest właściwy sposób, aby to sprawdzić?Jak sprawdzić, czy ustawione jest wejście php: //?

+0

Look to Kot Schrödingera! Nie możesz tego wiedzieć, dopóki go nie otworzysz! :) – Prasanth

+0

Jeśli jest to żądanie sieciowe, możesz sprawdzić $ _SERVER ['CONTENT_LENGTH'], poza tym nie ma innego sposobu. Funkcje takie jak fstat lub stream_get_meta_data nie działają w tym przypadku. :( – xpuu

Odpowiedz

2

można uzyskać zawartość php://input użyciu file_get_contents i sprawdzić wartość zwracaną, aby zobaczyć, czy to faktycznie ustawić:

$input = file_get_contents("php://input"); 
if ($input) {  
    // set  
} 
else { 
    // not set 
} 
+0

'isset()' zawsze zwróci true w tym scenariuszu, użyj '! Empty()' lub po prostu pozbyć się tego warunku – SamT

+0

'file_get_contents()' zwraca ciąg znaków w przypadku sukcesu – BlitZ

+0

@SamT: Myślę, że to jest dobrym pomysłem jest sprawdzenie, czy '$ input' ma wartość' TRUE' zamiast: –

9

spróbuj przetestować go z file_get_contents() (do czytania) + empty() lub boolean conversion (do testowania) :

<?php 
$input = file_get_contents('php://input'); 

if ($input) { 
    // exists 
} else { 
    // not exists 
} 

Od php.net:

Strumień otwarty z php: // wejściem można odczytać tylko raz; strumień nie obsługuje operacji wyszukiwania. Jednak w zależności od implementacji SAPI może być możliwe otwarcie innego strumienia wejściowego php: // i ponowne uruchomienie odczytu. Jest to możliwe tylko po zapisaniu danych treści żądania . Zazwyczaj ma to miejsce w przypadku żądań POST, ale nie innych metod żądań, takich jak PUT lub PROPFIND.

+0

Czy w tym przypadku odczytuję dane base64 z pliku, file_get_contents zwraca tylko coś, jeśli odczytuje prawdziwy plik? (to znaczy, jeśli użytkownik wyśle ​​fałszywą bazę 64, tylko tekst, ale wstępnie sformatowany, aby wyglądał jak baza 64, ale nie prawdziwy plik, co wynikałoby z $ input?) – sagits

+0

@sagits yes. 'file_get_contents()', podczas korzystania z tego wrappera URL, odczytuje dowolną treść, jeśli jest tam. Bez względu na strukturę zawartości. – BlitZ

+0

Dziękuję za @CORRUPT, trochę się zdezorientowałem z twojej odpowiedzi, masz na myśli to, że może odczytać fałszywą bazę 64, ale zwróci fałsz, czy też zwróci true? Czytałem w instrukcji funkcji, że zwraca wartość false, jeśli nie może odczytać zawartości. Czy możesz mi to wyjaśnić? Dziękuję za Twój czas. – sagits

-2

Załóżmy otrzymujesz wejściowych użytkownika z POST wnioskować można sprawdzić, czy jest to zestaw tak

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' to miejsce, w którym znajdują się dane" POST "lub" PUT ", a nie parametry" GET ". – Barmar

+0

Edytował odpowiedź .. thanx za poinformowanie mnie, że – user2801966

+0

Lepiej, chociaż będzie działać tylko wtedy, gdy dane są poprawnie sformatowane jako dane formularzy. Zwykle powodem użycia 'php: // input' jest to, że musisz uzyskać dostęp do nieprzetworzonych danych. – Barmar

1

zwraca true, jeśli zmienna istnieje i jej not null

$foo = 'bar'; 
var_dump(isset($foo));  -> true 

$baz = null; 
var_dump(isset($baz));  -> false 

var_dump(isset($undefined)); -> false