Foros del Web » Programando para Internet » PHP »

Problema al Subir Archivos

Estas en el tema de Problema al Subir Archivos en el foro de PHP en Foros del Web. Buenas, tengo un problema, quiero subir archivos pero de forma dinamica, con una barra de progresion. subir el archivo no es un problema, lo llega ...
  #1 (permalink)  
Antiguo 07/03/2009, 08:30
 
Fecha de Ingreso: febrero-2007
Mensajes: 4
Antigüedad: 17 años, 2 meses
Puntos: 0
Problema al Subir Archivos

Buenas, tengo un problema,
quiero subir archivos pero de forma dinamica, con una barra de progresion.
subir el archivo no es un problema, lo llega a subir,
el problema,
esq cuando stoy subiendo mando peticiones por xmlhttprequest, para saber cuanto va subiendo del archivo, pero no tengo la idea muy clara en dond preguntar, he probado consultando el $HTTP_POST_FILES, pero leyendo en el foro es una variable q solo es local tambien probe en $_FILES pero encuentro vacio el array, se q al subir un archivo crea un temporal en mi caso(C:\xampp\tmp\php593.tmp esto lo logro saber pero despues de subir el archivo, yo quiero saberlo antes)
, pero como puedo saber que temporal es?
y tambien cuanto del tamaño ya va subiendo.

encontre algo parecido en la red, pero trabaja con un cgi, yo quisiera trabajar con php puro

Esta es la pagina q encontre: (le quite el h t t p, por motivos de antispam)
codigo-fuente.com/programacion_web/subir-archivos-en-ajax-y-php-con-barra-de-progreso

Espero haber sido claro, muchas gracias por su tiempo.
Saludos
  #2 (permalink)  
Antiguo 07/03/2009, 09:34
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 3 meses
Puntos: 9
Respuesta: Problema al Subir Archivos

no se puede con php puro.
  #3 (permalink)  
Antiguo 07/03/2009, 12:32
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Problema al Subir Archivos

Cita:
$HTTP_POST_FILES, pero leyendo en el foro es una variable q solo es local
No es solo local, antes se usaba en vez de $_FILES, pero esta obsoleta y solo funciona si tienes activada una directiva en tu php.ini

El array $_FILES va a estar vacio porque este se llena cuando el archivo ha sido subido completamente.

Cita:
encontre algo parecido en la red, pero trabaja con un cgi, yo quisiera trabajar con php puro
Con PHP "puro" no puedes, tienes que usar alguna tecnologia aparte que sea capaz de interactuar con el cliente en tiempo real.

Echale un vistazo a esta pagina:
http://www.devpro.it/upload_progress/
  #4 (permalink)  
Antiguo 07/03/2009, 13:11
 
Fecha de Ingreso: febrero-2007
Mensajes: 4
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Problema al Subir Archivos

Gracias por sus respuestas x lo visto no se puede con php puro, lo intentare con el ejemplo q tengo con cgi, spero q el servidor soporte CGI's :S,
espero q algun dia los desarrolladores de PHP, puedan implementar alguna nueva funcion para dar seguimiento a los archivos q se van subiendo.

:D
Saludos y Gracias.
  #5 (permalink)  
Antiguo 08/03/2009, 18:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema al Subir Archivos

La extensión ya existe, se llama php_upload.dll y esta disponible desde PHP5.2, solo que muchos hosts no la tienen activada.

Saludos
  #6 (permalink)  
Antiguo 09/03/2009, 09:11
 
Fecha de Ingreso: febrero-2007
Mensajes: 4
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Problema al Subir Archivos

uhmm, interesant voy averguiar un poco mas acerca de eso, Gracias por su ayuda :D

Buenos a fin de cuentas, utilize cgi, por si acaso les paso lo q encontre.
No soy bueno con cgi's :S


Código:
#!"C:\xampp\perl\bin\perl.exe"
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use Fcntl qw(:DEFAULT :flock);
use File::Temp qw/ tempfile tempdir /;

my $dir = "./upload/";
my %Input;
my $query = new CGI;
my @pairs = $query->param;

foreach my $pair(@pairs){
	$Input{$pair} = $query->param($pair);
}

#Array con extensiones de archivos que podemos recibir
my @extensiones = ('gif','jpg','jpeg','bmp','png');

recepcion_de_archivo(); #Iniciar la recepcion del archivo

#TODO SALIO BIEN
print "Content-type: text/html\n\n";
print "<h1>El archivo fue recibido correctamente</h1>\n";
exit(1);

sub recepcion_de_archivo{

my $nombre_en_servidor = $Input{'archivo'};
$nombre_en_servidor =~ s/ /_/gi;
$nombre_en_servidor =~ s!^.*(\\|\/)!!;

my $extension_correcta = 0;

foreach (@extensiones){
	if($nombre_en_servidor =~ /\.$_$/i){
		$extension_correcta = 1;
		last;
	}
}
$extension_correcta = 1;
if($extension_correcta){
	#Crear Temporal
	my $temporal = $dir.$nombre_en_servidor.".tmp";
	if (-e "$nombre_en_servidor") { #borrar si Existe
		#unlink("$nombre_en_servidor");
	}
	if (-e "$temporal") {#borrar si Existe
		unlink("$temporal");
	}
	my $content_length = $ENV{'CONTENT_LENGTH'};
	sysopen(FH, $temporal, O_RDWR | O_CREAT)
		or die "No se puede abrir numfile: $!";
	# autoflush FH
	my $ofh = select(FH); $| = 1; select ($ofh);
	flock(FH, LOCK_EX)
		or die "No se puede escribir numfile: $!";
	seek(FH, 0, 0)
		or die "No se puede volver a trás numfile : $!";
	#Escribimos el tamaño total en el archivo 
	print FH $content_length;	
	close(FH);#Cerramos el flujo
	sleep(1);

	#Creando Archivo en Servidor...
	open (OUTFILE, ">$dir/$nombre_en_servidor") || die "No se puedo crear el archivo";
	binmode(OUTFILE); #Para no tener problemas en Windows

	#Transferimos byte por byte el archivo
	while (my $bytesread = read($Input{'archivo'}, my $buffer, 1024)) {
	print OUTFILE $buffer;
}

#Cerramos el archivo creado
close (OUTFILE);
#unlink("$temporal");
}else{
	print "Content-type: text/html\n\n";
	print "<h1>Extension incorrecta</h1>";
	print "Sólo se reciben archivo con extension:";
	print join(",", @extensiones);
	exit(0);
}
} #sub recepcion_de_archivo

Última edición por wannabe_aqp; 10/03/2009 a las 11:21 Razón: Solucion...
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 07:20.