Foros del Web » Programando para Internet » PHP »

Problema al bajar con FTP

Estas en el tema de Problema al bajar con FTP en el foro de PHP en Foros del Web. Buenas les cuento mi incognita / situación. Si alguno me puede dar una buena solucion hay plata se agradecera mucho... Basicamente tengo un pequeño código ...
  #1 (permalink)  
Antiguo 04/11/2010, 12:53
 
Fecha de Ingreso: marzo-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 0
Problema al bajar con FTP

Buenas les cuento mi incognita / situación. Si alguno me puede dar una buena solucion hay plata se agradecera mucho...

Basicamente tengo un pequeño código para interactuar con un ftp, el listado y el movimiento por las distintas carpetas no hay grandes problemas.

Mi único problema es al momento de descargar. Estoy utilizando el ftp_get con sus distintos parámetros para la descarga y solo me descarga cuando le paso la ruta de destino en una pc con windows. O sea, le pongo c:\ y me baja el archivo correctamente. Tengo entendido que si le pongo una ruta de linux lo que hace en realidad es moverlo en el servidor, cosa que a los clientes mucho no le va a servir. Alguno tiene idea de como puedo relacionar el ftp_get con una ventana de descarga para darle la ruta de destino del archivo?

Mi idea viene cambiando algunos headers, por ese lado, pero no se exactamente el como :(

Rulo
  #2 (permalink)  
Antiguo 04/11/2010, 12:57
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 8 meses
Puntos: 105
Respuesta: Problema al bajar con FTP

Seria genial que postees el codigo que usas... para ayudarte de mejor ^^

Te esperamos
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #3 (permalink)  
Antiguo 04/11/2010, 13:02
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 8 meses
Puntos: 105
Respuesta: Problema al bajar con FTP

Podrias ir probando agregando unas cabezeras de descarga.....

Código PHP:
Ver original
  1. header("Content-Type: application/force-download");
  2. header("Content-Disposition: attachment; filename='$file'");
  3. readfile($file);

De esa manera al usuario le aparece la ventana donde descargara el $file ^^

Suerte
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #4 (permalink)  
Antiguo 04/11/2010, 17:25
 
Fecha de Ingreso: marzo-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema al bajar con FTP

Ante todo se agradece la buena predisposición y la ayuda dada hasta el momento.

Por ahora el código viene de esta manera:

Código:
# FUNCIONES FTP

# CONSTANTES
# Cambie estos datos por los de su Servidor FTP
define("SERVER","XX.XX.XX.XX"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("MODO",true); //Activa modo pasivo

# FUNCIONES

function ConectarFTP($user, $password){
	//Permite conectarse al Servidor FTP
	$id_ftp=ftp_connect(SERVER,PORT); //Obtiene un manejador del Servidor FTP
	if(!ftp_login($id_ftp,$user,$password)){ //Se loguea al Servidor FTP
		return false;
	}
	ftp_pasv($id_ftp,MODO); //Establece el modo de conexión
	return $id_ftp; //Devuelve el manejador a la función
}

function SubirArchivo($archivo_local,$archivo_remoto, $id_ftp){
	//Sube archivo de la maquina Cliente al Servidor (Comando PUT)
	//$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
	if($id_ftp){
		ftp_put($id_ftp,$archivo_remoto,$archivo_local,FTP_BINARY);
	//Sube un archivo al Servidor FTP en modo Binario
	//ftp_quit($id_ftp); //Cierra la conexion FTP
	}
}

function ObtenerRuta($nivelActual = "", $carpeta = "", $id_ftp){
	//Obriene ruta del directorio del Servidor FTP (Comando PWD)
	//$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
	if($carpeta == ".."){
		ftp_chdir($id_ftp, $nivelActual);
		ftp_cdup($id_ftp);
	}
	else{
		ftp_chdir($id_ftp, $nivelActual."/".$carpeta); // Cambia al directorio destino	
	}	
	$Directorio = ftp_pwd($id_ftp); //Devuelve ruta actual p.e. "/home/willy"
	//ftp_quit($id_ftp); //Cierra la conexion FTP
	return $Directorio; //Devuelve la ruta a la función
}

function DescargarArchivo($ruta, $nombreArchivo, $destino, $id_ftp){
	//$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
	return ftp_get($id_ftp, $destino.$nombreArchivo, $ruta.$nombreArchivo, FTP_BINARY);	
	
}

function CambiarDirectorio($directorioDestino, $id_ftp){
	//Obriene ruta del directorio del Servidor FTP (Comando PWD)
	//$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
	$Directorio = ftp_chdir($id_ftp, $directorioDestino); // Cambia al directorio destino
	$Directorio=ftp_pwd($id_ftp); //Devuelve ruta actual p.e. "/home/willy"
	//ftp_quit($id_ftp); //Cierra la conexion FTP
	return $Directorio; //Devuelve la ruta a la función
}

function BajarNivelPadre(){
	//Obriene ruta del directorio del Servidor FTP (Comando PWD)
	$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
	$Directorio = ftp_chdir($id_ftp, $directorioDestino); // Cambia al directorio destino
	$Directorio=ftp_pwd($id_ftp); //Devuelve ruta actual p.e. "/home/willy"
	ftp_quit($id_ftp); //Cierra la conexion FTP
	return $Directorio; //Devuelve la ruta a la función
}
Ahí se ve el chanchullo de la carpeta de destino y todo eso. El header viene mas o menos por donde estoy necesitando porque permite decir donde se baja y / o en el peor de los casos baja el archivo a la carpeta predefinida. Así que por ese lado uno problema menos.

Ahora el archivo que me baja es un HTML en el que me tira error en la línea 52 cuando me queda la nueva función:

function DescargarArchivo($ruta, $nombreArchivo, $destino, $id_ftp){
//$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
$file = ftp_get($id_ftp, $destino.$nombreArchivo, $ruta.$nombreArchivo, FTP_BINARY);
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename='$file'");
readfile($file);
}

Lo cual tiene todo el sentido porque lo que devuelve ftp_get es un bool, no un archivo :)

Nuevamente, se agradece la buena predisposición y a seguir buscando, especialmente en PHP.net

Rulo
PD: Desde ya que si termina andando se postea la respuesta para cualquier otro ser humano que necesite el código.
  #5 (permalink)  
Antiguo 04/11/2010, 17:34
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 8 meses
Puntos: 105
Respuesta: Problema al bajar con FTP

La jugada que tu debes hacer es cuando el usuario seleccione un archivo a descargar.... tu te conectes al ftp y copies ese archivo al servidor de la actual y ahi con el header, fuerzas la descargas del archivo que copiaste.... asi el usuario podra seleccionar una ruta donde guardar.

Espero te sirva...

Suerte
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #6 (permalink)  
Antiguo 04/11/2010, 18:22
 
Fecha de Ingreso: marzo-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 0
Información Respuesta: Problema al bajar con FTP

Lo prometido es deuda y a mi no me gusta deberle a nadie :)

Código:
Function DescargarArchivo($ruta, $nombreArchivo, $id_ftp) {
	// path to remote file
	$remote_file = $ruta."/".$nombreArchivo;
	$local_file = $nombreArchivo;

	// open some file to write to
	$handle = fopen($local_file, 'w');
	if (ftp_fget($id_ftp, $handle, $remote_file, FTP_BINARY, 0)) {
		header("Content-Type: application/force-download");   
		header("Content-Disposition: attachment; filename=$local_file");
		readfile($local_file);
		unlink($local_file);
		return true;
	} 
	else {
		echo "There was a problem while downloading\n";
		return false;
	}
}
Esa es la función que use para descargar el archivo mediante browser. El readfile levanta el archivo, el único problema era que me lo generaba en la carpeta donde se encuentra el php. Como supuse que luego de un par de semanas los dueños del hosting comenzarian una linchada hacia mi persona, el unlink soluciono el problema.

Cheers

Rulo
PD: Mil gracias por el puntapie inicial masterojitos
  #7 (permalink)  
Antiguo 05/11/2010, 08:34
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 8 meses
Puntos: 105
Respuesta: Problema al bajar con FTP

De nada mi estimado.... se me olvido comentarte que luego de haberlo descargado lo elimines del servidor donde lo copiaste para que no se llene de archivos... pero veo que pensaste en ello ^^

Un gusto apoyar..... Dios los Bendiga a Todos.

Suerte
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog

Etiquetas: bajar, ftp
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 22:09.