2010-03-30 8 views
6

Ich habe ein Upload-Formular mit einer Datei hochgeladen werden. Das Problem, das ich habe ist, dass selbst dann, wenn keine Datei der if (isset ($ _ FILES)) hochgeladen wird, oder wenn noch so erfolgreich verläuft (empty ($ _ FILES)!):isset und! Leave nicht durch eine Prüfung für hochgeladene Dateien

$_FILES = $HTTP_POST_FILES; 
if($_POST['type'] == 'photo' && isset($_FILES)){ 
// returns true even if no file is uploaded. What am I missing! 
} 
+0

mit '$ HTTP_ POST_FILES' ist veraltet: http://php.net/manual/en/reserved.variables.files.php (abgesehen davon, dass es dieselben Werte wie '$ _FILES' enthält) –

Antwort

11

Als superglobalen, $_FILES ist vermutlich immer eingestellt, unabhängig davon, ob eine hochgeladene Datei existiert oder nicht.

Suchen Sie nach den Datei (en), die Sie erwarten, und sehen Sie sich das Größenfeld an. (Offenbar gemäß den Anwender-Beitrag Hinweise im Handbuch, wenn das Formular des Upload-Element enthält, ist es möglich, dass auch isset($_FILES["my_file_name"]) wahr zurück, obwohl es keine Datei ausgewählt wurde

Dies soll zuverlässig arbeiten.

if($_POST['type'] == 'photo' && 
    ((isset($_FILES["my_file_name"]["size"]) && 
    ($_FILES["my_file_name"]["size"] > 0))){ 

(der isset() ist eine "undefiniert Index" Mitteilung zu verhindern.)

Was möchten Sie tun dies für, nebenbei gesagt ?:

$_FILES = $HTTP_POST_FILES; 
+0

Ich hatte das schon einmal, aber es war ein bisschen langwierig : $ _FILES ['image'] ['tmp_name'] ... Sie wissen, dass ich keine Ahnung von dieser zweiten Zeile habe. $ _FILES = $ HTTP_POST_FILES; Das war einer von ungefähr drei Teilen, der von jemand anderem geschrieben wurde. – kalpaitch

+0

@kalpaitch Ich denke, Sie können diesen Teil sicher entfernen, es war wahrscheinlich für Rückwärtskompatibilität in PHP 4. –

+0

@ Kalpaitch Überprüfung für tmp_name ist auch in Ordnung. –