Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/11/2010, 17:25
rulodlb
 
Fecha de Ingreso: marzo-2010
Mensajes: 54
Antigüedad: 14 años, 1 mes
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.