Foros del Web » Programando para Internet » PHP »

Array de archivos

Estas en el tema de Array de archivos en el foro de PHP en Foros del Web. Tengo un formulario donde quiero subir archivos al servidor, por medio de un bucle creo esto: <input name="Imagen[<? print $i ?>]" type="file" class="Lila" size="50"> Y ...
  #1 (permalink)  
Antiguo 07/03/2005, 03:43
 
Fecha de Ingreso: junio-2003
Mensajes: 744
Antigüedad: 14 años, 5 meses
Puntos: 0
Array de archivos

Tengo un formulario donde quiero subir archivos al servidor, por medio de un bucle creo esto: <input name="Imagen[<? print $i ?>]" type="file" class="Lila" size="50">
Y por medio de otro, intento visualizar los datos como he hecho con otros del formulario (tipo text): $Imagen[$i]_name, eso me imprime un temp o algo así.
He estado buscando por los foros y he encontrado una posible solución $Imagen = $Imagen[$i][tmp_name] pero no me funciona :(
¿Como tendría que hacerse? Muchas gracias, como siempre!
__________________
Ibisof | Saludos desde Eivissa !!! :p
  #2 (permalink)  
Antiguo 07/03/2005, 03:57
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... no te entiendo muy bien... pero te diré que para recojer el nombre temporal del archivo debes utilizar $_FILE['archivo']['tmp_name'] .... .... espero te sirva de algo...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 07/03/2005, 04:09
 
Fecha de Ingreso: junio-2003
Mensajes: 744
Antigüedad: 14 años, 5 meses
Puntos: 0
En mi caso tendría que ser así: print $_FILE['Imagen']['i']['tmp_name'] ?? (Me da error)
No sé realmente si lo del nombre temporal es lo que necesito.. yo lo que quiero es recoger el nombre del archivo para subirlo, teniendo en cuenta que se creó dentro de un bucle con name Imagen[<? print $i ?>]
Muchas gracias
__________________
Ibisof | Saludos desde Eivissa !!! :p
  #4 (permalink)  
Antiguo 07/03/2005, 04:28
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

http://www.php.net/manual/en/feature...d.multiple.php y veras que es $_FILE['Imagen']['tmp_name'][$i] , con el indice variable al final.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 07/03/2005, 05:05
 
Fecha de Ingreso: junio-2003
Mensajes: 744
Antigüedad: 14 años, 5 meses
Puntos: 0
Y si no tengo los register globals a on?
No me da ningun resultado hacer un print de eso... sale en blanco!
__________________
Ibisof | Saludos desde Eivissa !!! :p
  #6 (permalink)  
Antiguo 07/03/2005, 06:45
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Error de mis dedos: donde pongo $_FILE quiero poner $_FILES (de todas formas, en la pagina del manual que te puse viene bien).

Saludos.
  #7 (permalink)  
Antiguo 07/03/2005, 07:00
 
Fecha de Ingreso: junio-2003
Mensajes: 744
Antigüedad: 14 años, 5 meses
Puntos: 0
Es verdad faltaba la S (Ni mirando el manual me di cuenta)
Ahora cuando imprimo se visualiza esto: C:\WINNT\TEMP\php7E.tmp
y no puedo subir los archivos ! Porque?
__________________
Ibisof | Saludos desde Eivissa !!! :p
  #8 (permalink)  
Antiguo 07/03/2005, 09:57
 
Fecha de Ingreso: junio-2003
Mensajes: 744
Antigüedad: 14 años, 5 meses
Puntos: 0
Tengo que configurar algo en el ini quizá?
__________________
Ibisof | Saludos desde Eivissa !!! :p
  #9 (permalink)  
Antiguo 07/03/2005, 10:05
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Si visualizas eso es porque el archivo ya se subio. Pero en un lugar temporal, es decir que se borrara cuando el script termine de ejecutarse.
Tienes que copiar o mover ese archivo temporal a su lugar definitivo con, por ejemplo
http://ar2.php.net/manual/en/functio...oaded-file.php
  #10 (permalink)  
Antiguo 07/03/2005, 10:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ahora cuando imprimo se visualiza esto: C:\WINNT\TEMP\php7E.tmp

que "imprimes"?

Eso es la ruta temporal que tiene tu archivo cuando lo subes por HTTP vía PHP. Eso es lo que tienes que tomar .. junto con el valor de $_FILE['Imagen']['name'][$i] para aplicar tu move_uploaded_file() y moverlo a su destino definitivo.

Un saludo,
  #11 (permalink)  
Antiguo 07/03/2005, 10:42
 
Fecha de Ingreso: junio-2003
Mensajes: 744
Antigüedad: 14 años, 5 meses
Puntos: 0
Ah muchas gracias Cluster,
Como estoy acostumbrada ha subir archivos con copy pues no habia pensado en esa función...
Ahora investigaré como funciona y como puedo restringir tamaños...
Gracias nuevamente!
__________________
Ibisof | Saludos desde Eivissa !!! :p
  #12 (permalink)  
Antiguo 07/03/2005, 12:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Se usa igual copy() que move_uploaded_file() .. sólo que esta última función tiene los permisos suficientes y está diseñada para hacer esos mismo: mover el archivo que subió por HTTP de su hubicación temporal hacia su destino sin más problemas. Copy() hace lo mismo en la mayoría de casos .. pero tiene problemas de permisos en configuraciones tipo "safe_mode" o "open_base_dir" que solventa y está autorizado para hacerlo la función move_uploaded_file()

Un saludo,
  #13 (permalink)  
Antiguo 08/03/2005, 03:46
 
Fecha de Ingreso: junio-2003
Mensajes: 744
Antigüedad: 14 años, 5 meses
Puntos: 0
Anda... ;) Ya he aprendido una cosa nueva...
Estudiando sobre el tema he creado esto:

Código:
	$Tamaño=$_FILES['Imagen']['size'][$i];
	$Tipo=$_FILES['Imagen']['type'][$i];
				
	if (($Tamaño < 150000) && ($Tipo == "image/pjpeg"))
	{
	    if (move_uploaded_file($HTTP_POST_FILES['Imagen']['tmp_name'][$i],"../../FConstruccion/".$id_galeria[mayor]."H.jpg")) print "Archivo cargado correctamente";
						else print "Ocurrió un error al subir el archivo, consulte su administrador web";
					}
Y me funciona correctamente, pero... creo que te sube siempre el archivo aunque este no sea correcto, no? Digamos que no subes un jpg que subes un gif... para empezar lo subes al servidor y luego te lo mueve o no... pero de entrada ya te lo ha subido, no?
Buscando sobre este tema creo que se puede corregir poniendo en el formulario <input type="hidden" name="MAX_FILE_SIZE" value="150000">
y así no sube archivos mayores pero... y que ocurre cuando el archivo no tiene una extensión correcta?
Me explico? Cuando lo hacia con copy yo comprobaba todo antes de hacer el copy (igual he estado equivocada y igualmente me lo subia a los temporales del servidor)
Que se puede hacer sobre el tema?
__________________
Ibisof | Saludos desde Eivissa !!! :p
  #14 (permalink)  
Antiguo 08/03/2005, 06:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Así funciona el "Upload vía HTTP" .. PHP no tiene control sobre el archivo que vá subiendo hasta que está todo en el servidor, es ahí donde puede tomar el archivo y empezar a ver cosas como su tamaño .. las cabeceras del archivo (MIME - type) ... y otros detalles.

Podrías ver vía javascript la extensión del archivo .. para evitar tener que subir el archivo para aplicar una restricción tipo .extensión ... Eso sí, nunca te olvides de validar finalmente en PHP pues es este el que manda en última instancia.

Un saludo,
  #15 (permalink)  
Antiguo 08/03/2005, 09:03
 
Fecha de Ingreso: junio-2003
Mensajes: 744
Antigüedad: 14 años, 5 meses
Puntos: 0
Claro, tienes razón.. con javascript se podría controlar. Vale miraré de validarlo así.
Solo saber si era mi idea o no se podía controlar directamente desde php y veo que tenía razón..
Muchas gracias por la idea del javascript, y bueno, por todo que siempre me echais un cable cuando más lo necesito..
__________________
Ibisof | Saludos desde Eivissa !!! :p

Última edición por Enea; 08/03/2005 a las 09:04
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:07.