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
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:
- Comprueba que el archivo
php.ini
tiene las opcionesfile_uploads = On
,post_max_size
yupload_max_file_size
. Asegúrate de que estás haciendo los cambios en el archivophp.ini
adecuado (comprueba el valor de estas opciones al hacerphpinfo()
). 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 escribir8M
y no8MB
. - No utilices JavaScript para deshabilitar el campo que sube el archivo al enviar el formulario.
- Asegúrate de que no tienes dos campos de formulario para subir archivos con el mismo valor en su atributo
name
. - Asegúrate de que el directorio temporal donde se suben los archivos tienen permisos de lectura y escritura.
- Asegúrate de que la ruta del directorio temporal donde se suben los archivos no tenga espacios en blanco.
- Asegúrate de que todos los formularios de la página incluyen la correspondiente etiqueta de cierre
</form>
. - Asegúrate de que la etiqueta
<form>
del formulario que sube archivos contiene el atributoenctype="multipart/form-data"
. - Asegúrate de que la etiqueta
<form>
del formulario que sube archivos contiene el atributomethod="POST"
, ya que el métodoGET
de HTTP no permite subir archivos. - Asegúrate de que el campo de formulario que sube archivos tiene un atributo
name
, ya que no basta con que incluya el atributoid
. - 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).
- 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
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
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
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
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