2010-03-30 14 views
6

Tengo un formulario de carga con un archivo para cargar. El problema que tengo es que incluso cuando se carga ningún archivo de la if (isset ($ _ FILES)) o si todavía pasa tan exitoso (vacío ($ _ FILES)!):isset y! Vacío no pasa por un control de archivos cargados

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

Uso de '$ HTTP_ POST_FILES' está en desuso: http://php.net/manual/en/reserved.variables.files.php (además de que contiene los mismos valores que '$ _FILES') –

Respuesta

11

Ser superglobal, $_FILES es presumiblemente siempre configurado, independientemente de si existe o no un archivo subido.

Compruebe la (s) carga (s) de archivo que usted esperaría y observe el campo de tamaño. (Al parecer, según las notas Contribución de usuario en el manual, si el formulario contiene el elemento de carga, es posible que incluso isset($_FILES["my_file_name"]) volverá cierto a pesar de que no había ningún archivo seleccionado

Esto debería funcionar de forma fiable:.

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

(el isset() es para evitar un "índice indefinido" aviso.)

¿Qué se hace esto para, por cierto ?:

$_FILES = $HTTP_POST_FILES; 
+0

Lo tenía antes pero era un poco longwided : $ _FILES ['image'] ['tmp_name'] ... Sabes que no tengo idea de esa segunda línea. $ _FILES = $ HTTP_POST_FILES; Esa fue una de las tres partes escritas por otra persona. – kalpaitch

+0

@kalpaitch Creo que puede eliminar esa pieza de forma segura, probablemente fue por compatibilidad con versiones anteriores en PHP 4. –

+0

@kalpaitch comprobando si tmp_name también está bien. –

Cuestiones relacionadas