Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Por qué el array $_FILES está vacío al subir archivos con PHP?

27 de agosto de 2010

Utilizo un servidor WAMP con Windows 7. Mi versión deApache es 2.2.11 y la de PHP es 5.2.11. Cuando intento subir un archivo al servidor con cualquier formulario, parece que el archivo se sube, pero luego en la aplicación PHP el array global $_FILES está vacío. Tampoco existe ningún archivo en la carpeta temporal c:\wamp\tmp\.

En el archivo php.ini tengo configurado que se permitan las subidas de archivos y todas las opciones relacionadas. Además, la carpeta tmp\ tiene permisos de lectura y escritura para el usuario, así que no se qué puede estar pasando.

Este es un ejemplo del código HTML que utilizo:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <form enctype="multipart/form-data" action="vanilla-upload.php" method="POST">
        Selecciona un archivo: <input name="uploadedfile" type="file" /><br />
        <input type="submit" value="Subir Archivo" />
    </form>
</body>
</html>

Y el código PHP en el que el array $_FILES está vacío:

<?php
 
echo 'file count=', count($_FILES),"\n";
var_dump($_FILES);
echo "\n";

Estás leyendo una traducción autorizada de la pregunta Why would $_FILES be empty when uploading files to PHP? planteada por elmonty en StackOverflow.


Respuestas

#1

Aunque es algo que no suele suceder, en el manual de PHP se explica lo siguiente:

Si el array $_FILES de repente se encuentra vacío aunque el formulario parezca correcto, comprueba que tienes espacio libre suficiente en la carpeta temporal de tu máquina. Si no, la subida de archivos podría fallar sin mostrar ningún mensaje de error.

Al margen de este comentario, esta es la lista de comprobaciones que deberías realizar para solucionar este problema:

  1. Comprueba que el archivo php.ini tiene las opciones file_uploads = On, post_max_size y upload_max_file_size. Asegúrate de que estás haciendo los cambios en el archivo php.ini adecuado (comprueba el valor de estas opciones al hacer phpinfo()). Y ten cuidado de no escribir mal el valor de estas opciones, ya que si quieres limitar el tamaño a 8 megabytes, tienes que escribir 8M y no 8MB.
  2. No utilices JavaScript para deshabilitar el campo que sube el archivo al enviar el formulario.
  3. Asegúrate de que no tienes dos campos de formulario para subir archivos con el mismo valor en su atributo name.
  4. Asegúrate de que el directorio temporal donde se suben los archivos tienen permisos de lectura y escritura.
  5. Asegúrate de que la ruta del directorio temporal donde se suben los archivos no tenga espacios en blanco.
  6. Asegúrate de que todos los formularios de la página incluyen la correspondiente etiqueta de cierre </form>.
  7. Asegúrate de que la etiqueta <form> del formulario que sube archivos contiene el atributo enctype="multipart/form-data".
  8. Asegúrate de que la etiqueta <form> del formulario que sube archivos contiene el atributo method="POST", ya que el método GET de HTTP no permite subir archivos.
  9. Asegúrate de que el campo de formulario que sube archivos tiene un atributo name, ya que no basta con que incluya el atributo id.
  10. Asegúrate de que el archivo que estás subiendo no contiene ningún carácter extraño en su nombre (idealmente todos los caracteres deberían ser letras o números).
  11. Comprueba si tienes un archivo .htaccess en algún directorio de tu aplicación. Si lo tienes, asegúrate de que no contenga ninguna opción que interfiera con la subida de archivos.

En cualquier caso, lo más probable es que alguna opción de configuración del archivo php.ini no sea correcta. Prueba a utilizar las siguientes opciones y no olvides reiniciar el servidor Apache después de realizar los cambios:

file_uploads = On;
post_max_size = 128M;
upload_max_file_size = 128M;

@librosweb

20 septiembre 2014, 22:43
#2

A mi me pasó este error, y vi todos y cada uno de los números y ninguno dió con el problema. Finalmente el problema era que estaba usando AJAX para enviar el formulario... ¡Pero AJAX no envía archivos! Por ende, nunca lo enviaba y me tiraba vacío. Tuve que enviar el formulario normalmente (HTML) y ahí pude subir el archivo satisfactoriamente :D

@miguelga93

7 diciembre 2014, 2:45
#3

Hola estimados, a mí me paso lo mismo, que recibía $_FILES[''] vacío. Mi problema puntual era que estaba usando jQuery versión 1.4.4 y la cambié a la versión 1.6.1; nada más que eso. Espero que les sirva. Saludos!

@devrengo73

24 febrero 2015, 14:59
#4

Vaya tenias razón, anule el jquery y funcionó... no se ni las horas que llevaba con esto....horas más tarde.. al cambiar la versión del jquery la página se desmontaba, eso si, la imagen subia correctamente... y despues de mucho pelear la solución que me ha valido y la dejo aquí por si a alguien le puede hacer falta, es simplemente añadir a la etiqueta form un 'data-ajax="false"' y la imagen subirá correctamente con la version de jquery 1.4.x

@jfajardo75

16 octubre 2017, 23:07
#5

Buen dia comunidad, tengo el mismo problema, ya cheque lo que comentaron pero aun sigue el problema: Undefined index: file,

esta es mi funcion en php

function post_files() { $posted = obtain_posted_body(); $filename = $_FILES['file']['name']; $tmp_name = $_FILES["file"]["tmp_name"]; $location = '../one-tj/archivos'; move_uploaded_file($_FILES['file']['tmp_name'],$location.$filename); $sql = "INSERT INTO file (file_name, description, section) VALUES ('$filename', '$posted->description', '$posted->section')"; $result = query_post($sql); echo json_encode($result, JSON_UNESCAPED_UNICODE); }

@montanacp55

15 enero 2018, 18:42