2010-03-30 13 views
6

Mam formularz do przesłania z plikiem do przesłania. Problem mam to, że nawet jeśli plik nie zostanie dodane if (isset ($ _ FILES)), czy nadal uchodzi za sukces (empty ($ _ FILES)!):isset i! Empty nie przechodzą przez czek dla przesłanych plików

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

Korzystanie '$ HTTP_ POST_FILES' jest przestarzałe: http://php.net/manual/en/reserved.variables.files.php (oprócz tego, że zawiera te same wartości co '$ _FILES') –

Odpowiedz

11

Będąc superglobalną, $_FILES jest przypuszczalnie zawsze ustawione, niezależnie od tego, czy przesłany plik istnieje, czy nie.

Sprawdź, czy pliki zostały przesłane i sprawdź pole rozmiaru. (Najwyraźniej zgodnie z notami użytkownika Przyczynił się w instrukcji, jeśli formularz zawiera element wysyłania, możliwe jest, że nawet isset($_FILES["my_file_name"]) zwróci true, chociaż nie było wybrany plik

To powinno działać niezawodnie.

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

(isset() jest zapobieganie "niezdefiniowanej index" zawiadomienie.)

Co robisz to za, przy okazji ?:

$_FILES = $HTTP_POST_FILES; 
+0

Zrobiłem to wcześniej, ale było trochę dłuższe : $ _FILES ['image'] ['tmp_name'] ... Wiesz, że nie mam pojęcia o drugiej linii. $ _FILES = $ HTTP_POST_FILES; To była jedna z około trzech części napisanych przez kogoś innego. – kalpaitch

+0

@kalpaitch Myślę, że możesz bezpiecznie usunąć tę część, prawdopodobnie była to kompatybilność wsteczna w PHP 4. –

+0

@kalpaitch sprawdzanie dla tmp_name jest również w porządku. –

Powiązane problemy