Foros del Web » Programando para Internet » PHP »

Subir varios ficheros con un solo formulario

Estas en el tema de Subir varios ficheros con un solo formulario en el foro de PHP en Foros del Web. hola, bueno mi problema es el siguiente: tengo un formulario con la posiblidad de subir hasta 12 archivos, si subo 1 archivo la respuesta que ...
  #1 (permalink)  
Antiguo 07/04/2011, 18:41
 
Fecha de Ingreso: noviembre-2007
Mensajes: 17
Antigüedad: 16 años, 5 meses
Puntos: 0
Subir varios ficheros con un solo formulario

hola, bueno mi problema es el siguiente: tengo un formulario con la posiblidad de subir hasta 12 archivos, si subo 1 archivo la respuesta que me da el comando
<pre><? print_r($_FILES); ?></pre>
es la siguiente
Array
(
[archivo1] => Array
(
[name] => Foto.jpg
[type] => image/jpeg
[tmp_name] => c:/wamp1/tmp\php442.tmp
[error] => 0
[size] => 4468236
)

[archivo2] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[archivo3] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
) etc....
pero si elijo 2 ficheros a la vez me devuelve esto

Array
(
)
todo vacio
mi formulario es el siguiente

Código HTML:
Ver original
  1. <form action="insertartestresp.php" method="post" enctype="multipart/form-data">
  2. <input type="file" name="archivo1" size="35"></td>
  3. <input type="file" name="archivo2" size="35"></td>
  4. <input type="file" name="archivo3" size="35"></td>
  5. <input name="enviar" type="submit" value="Enviar" />       <input name="borrar" type="reset" value="Borrar" />
etc...

y este es el codigo que uso para recogerlos
Código PHP:
Ver original
  1. if($_FILES['archivo1']['type'] == 'image/jpeg')
  2. {
  3. $formato1 = 'jpeg';
  4. $destino1=$vnumtest.$vversion."1.".$formato1;
  5. }
  6.  
  7.     if($_FILES['archivo1']['type'] == 'image/gif'){
  8.     $formato1 = 'gif';
  9.     $destino1=$vnumtest.$vversion."1.".$formato1;
  10.  
  11.     }
  12.  
  13. //comprobamos que se ha seleccionado un archivo para subir
  14. if($_FILES['archivo1']['name'] != ''){
  15. //comprobamos que el formato es apto
  16. if($formato1 != 'gif' and $formato1 != 'jpeg')
  17. {
  18.  
  19. echo 'formato no admitido';
  20. }else{
  21. $destinofinal1="archivos/".$destino1;
  22. //subimos el archivo
  23.     if (copy($_FILES['archivo1']['tmp_name'],$destinofinal1)) {
  24. echo            $status = "Archivo subido: <b>".$archivo."</b>";
  25.         } else {
  26.     echo        $status = "Error al subir el archivo";
  27.         }
  28. }
  29. }
  30.  
  31.  
  32. //Para subir el archivo 2
  33. //comprobamos el formato del archiv
  34. if($_FILES['archivo2']['type'] == 'image/jpeg')
  35. {
  36. $formato2 = 'jpeg';
  37. $destino2=$vnumtest.$vversion."2.".$formato2;
  38. }
  39.  
  40.     if($_FILES['archivo2']['type'] == 'image/gif'){
  41.     $formato2 = 'gif';
  42.     $destino2=$vnumtest.$vversion."2.".$formato2;
  43.  
  44.     }
  45.  
  46. //comprobamos que se ha seleccionado un archivo para subir
  47. if($_FILES['archivo2']['name'] != ''){
  48. if($formato2 != 'gif' and $formato2 != 'jpeg')
  49. {
  50.  
  51. echo 'formato no admitido';
  52. }else{
  53. $destinofinal2="archivos/".$destino2;
  54. //subimos el archivo
  55.     if (copy($_FILES['archivo2']['tmp_name'],$destinofinal2)) {
  56.        echo   $status = "Archivo subido: <b>".$archivo2."</b>";
  57.         } else {
  58.     echo        $status = "Error al subir el archivo";
  59.         }
  60. }
  61. }

por separado funciona correctamente pero cuando intento varios a la vez me da problemas

Última edición por zarech; 07/04/2011 a las 18:51
  #2 (permalink)  
Antiguo 07/04/2011, 19:25
 
Fecha de Ingreso: noviembre-2007
Mensajes: 17
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Subir varios ficheros con un solo formulario

he simplificado el codigo y me sigue pasando lo mismo
Código HTML:
Ver original
  1. <form action="2.php" method="post" enctype="multipart/form-data">
  2.       <input name="archivo" type="file" size="35" />
  3.       <input name="archivo1" type="file" size="35" />
  4.       <input name="archivo2" type="file" size="35" />
  5.  
  6.  
  7.       <input name="enviar" type="submit" value="Upload File" />
  8.       <input name="action" type="hidden" value="upload" />    
  9.     </form>

y en la respuesta
si pongo esto
Código PHP:
Ver original
  1. echo $_FILES['archivo']['name'];
  2. echo $_FILES['archivo1']['name'];

no muestra nada
y si pongo esto
Código PHP:
Ver original
  1. print_r($_FILES);
me muestra el array vacio
pero si subo mas de un archivo

1 archivo
Código PHP:
Ver original
  1. (
  2.     [archivo] => Array
  3.         (
  4.             [name] => Foto.jpg
  5.             [type] => image/jpeg
  6.             [tmp_name] => c:/wamp1/tmp\php47D.tmp
  7.             [error] => 0
  8.             [size] => 4468236
  9.         )
  10.  
  11.     [archivo1] => Array
  12.         (
  13.             [name] =>
  14.             [type] =>
  15.             [tmp_name] =>
  16.             [error] => 4
  17.             [size] => 0
  18.         )
  19.  
  20.     [archivo2] => Array
  21.         (
  22.             [name] =>
  23.             [type] =>
  24.             [tmp_name] =>
  25.             [error] => 4
  26.             [size] => 0
  27.         )
  28.  
  29. )
varios archivos
Código PHP:
Ver original 

¿que estoy haciendo mal?
Gracias por todo
  #3 (permalink)  
Antiguo 07/04/2011, 19:45
Avatar de humbero12  
Fecha de Ingreso: abril-2009
Ubicación: Cereté, Colombia
Mensajes: 53
Antigüedad: 15 años
Puntos: 4
Respuesta: Subir varios ficheros con un solo formulario

Aquí un simple cargador de imágenes

subir.php
Código PHP:
Ver original
  1. <?php
  2. $files = $_FILES['archivo'];
  3. if(!isset($files)){
  4.     $num = $_GET['n']==NULL?5:$_GET['n'];
  5.     echo '<form action="" method="post" enctype="multipart/form-data">';
  6.     for($i=0;$i<$num;$i++){
  7.         echo 'Archivo: <input type="file" name="archivo[]" /><br />';
  8.     }
  9.     echo '<input type="submit" value="Subir" />
  10.    </form>';
  11. }
  12. else{
  13.     if(count($files)==0) echo "No hay archivos para subir.";    
  14.     else{
  15.         for($i=0;$i<count($files['name']);$i++){
  16.             if(archivosValidos($files['type'][$i])){
  17.             copy($files['tmp_name'][$i],$files['name'][$i]);
  18.             echo $files['name'][$i].": Guardado<br />";
  19.             }
  20.             else
  21.             echo "El archivo \"".$files['name'][$i]."\" no es valido<br />";
  22.         }
  23.     }
  24. }
  25.  
  26. function archivosValidos($tipo){
  27.     if($tipo=="image/jpeg"|$tipo=="image/png"|$tipo=="image/gif")
  28.     return true;
  29.     else
  30.     return false;
  31. }
  32. ?>
Espero que sirva
__________________
Sigueme en twitter @humbero12
Blog #cazacontenidos
  #4 (permalink)  
Antiguo 07/04/2011, 19:57
 
Fecha de Ingreso: noviembre-2007
Mensajes: 17
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Subir varios ficheros con un solo formulario

si, funciona correctamente
pero me gustaria saber cual es el fallo que cometo, para aprender
ya que segun lo que he leido no encuentro el fallo por ningun lado
y no se por que al subir mas de 1 archivo a la vez me devuelve el array vacio
  #5 (permalink)  
Antiguo 08/04/2011, 06:24
 
Fecha de Ingreso: noviembre-2007
Mensajes: 17
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Subir varios ficheros con un solo formulario

¿puede ser que tenga algun problema en la configuracion php?

por que yo creo que antes me funcionaba de esa forma pero ahora no :S
  #6 (permalink)  
Antiguo 08/04/2011, 16:27
 
Fecha de Ingreso: noviembre-2007
Mensajes: 17
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Subir varios ficheros con un solo formulario

Acabo de comprobar que es problema de mi configuracion php ya que en otro servidor con la misma version el script funciona correctamente y no me devuelve el array vacio

Maximum size of POST data that PHP will accept.
post_max_size = 8M

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = "c:/wamp1/tmp"

; Maximum allowed size for uploaded files.
upload_max_filesize = 8M

register globals on
hay algo mal?
  #7 (permalink)  
Antiguo 08/04/2011, 22:57
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Subir varios ficheros con un solo formulario

Problema: register globals on

Esto te puede causar mas dolores de cabeza de lo que imaginas, ademas de serios riesgos de seguridad.

Volviendo a tu pregunta inicial, si tienes 20 campos tipo file, en $_FILES vas a encontrar 20 elementos, independientemente de que hayas enviado 1, 5, 10 o 20 archivos. Tu rutina debe recorrer cada elemento para determinar si se envio un archivo y entonces procesarlo.

Código PHP:
Ver original
  1. if($_FILES['name'][$numero] == '') {
  2.     // En este campo no se subio archivo
  3.     // Por eso name = cadena vacia
  4. }
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 09/04/2011, 08:55
 
Fecha de Ingreso: noviembre-2007
Mensajes: 17
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Subir varios ficheros con un solo formulario

Cita:
Iniciado por Triby Ver Mensaje
Problema: register globals on

Esto te puede causar mas dolores de cabeza de lo que imaginas, ademas de serios riesgos de seguridad.

Volviendo a tu pregunta inicial, si tienes 20 campos tipo file, en $_FILES vas a encontrar 20 elementos, independientemente de que hayas enviado 1, 5, 10 o 20 archivos. Tu rutina debe recorrer cada elemento para determinar si se envio un archivo y entonces procesarlo.

Código PHP:
Ver original
  1. if($_FILES['name'][$numero] == '') {
  2.     // En este campo no se subio archivo
  3.     // Por eso name = cadena vacia
  4. }
el problema era que cuando subia mas de un archivo a la vez en la respuesta me devolvia $_FILEs totalmente vacio

pero ya lo he solucionado he reinstalado los servidores otra vez y ya funciona todo correctamente

Etiquetas: ficheros, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:00.