Foros del Web » Programando para Internet » PHP »

Subir a FTP de forma remota (automatizado)

Estas en el tema de Subir a FTP de forma remota (automatizado) en el foro de PHP en Foros del Web. Buenas, este es mi primer post en el Foro. Tengo un inconveniente un poco complicado. Tengo una aplicacion en la cual, luego de que el ...
  #1 (permalink)  
Antiguo 06/03/2009, 07:55
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Subir a FTP de forma remota (automatizado)

Buenas, este es mi primer post en el Foro. Tengo un inconveniente un poco complicado.
Tengo una aplicacion en la cual, luego de que el usuario ingrese los datos de su FTP (usuario y contraseña) necesito que esta suba (de forma automatica) determinados archivos a una carpeta especifica en el FTP del mismo.

Muchas gracias.
  #2 (permalink)  
Antiguo 06/03/2009, 08:06
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 3 meses
Puntos: 9
Respuesta: Subir a FTP de forma remota (automatizado)

tu quierse que un usuario introduzca los datos de un ftp en tu web y automaticamente se suban archivos de la maquina del usuario a este ftp?

explica mejor
  #3 (permalink)  
Antiguo 06/03/2009, 08:08
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Subir a FTP de forma remota (automatizado)

Cual es la consulta?
Tienes algo desarrollado?
Tienes algún problema?

Saludos y Bienvenido
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #4 (permalink)  
Antiguo 06/03/2009, 08:18
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Subir a FTP de forma remota (automatizado)

Tengo una aplicacion ya desarrollada. Lo que quiero lograr es que el usuario pueda ingresar los datos de su FTP (usuario y password) en un formulario y, al aceptar, que automaticamente se suban determinados archivos que estan alojados en el FTP de MI aplicacion a una carpeta especifica en el FTP del usuario.


Usuario

l l
l l Datos de FTP del Usuario
l l (user - pass)
l l
l l

Mi Aplicacion ================== > FTP del Usuario
Mi FTP Subir [Archivos]
[Archivos]

Espero que se entienda, jeje
  #5 (permalink)  
Antiguo 06/03/2009, 08:23
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Subir a FTP de forma remota (automatizado)

Pero estan en el mismo servidor?
Siempre será el mismo servidor al que se conectará?
Siempre la misma carpeta y mismos archivos?

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #6 (permalink)  
Antiguo 06/03/2009, 08:25
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Subir a FTP de forma remota (automatizado)

No, no, justamente ese es el problema, que estan en diferentes servidores. Mi aplicacion y los archivos a "transferir" estan en un servidor. El ftp del usuario, a donde quiero "transferir" los archivos, esta en otro servidor.

No siempre sera el mismo servidor, y yo no conzco la estructura del servidor, solo se que debo transferir los archivos a la carpeta (supongamos) "X". Solo se eso. No se tampoco la ubicacion de la carpeta "X" dentro del servidor del usuario.

Última edición por benji_; 06/03/2009 a las 08:30
  #7 (permalink)  
Antiguo 06/03/2009, 08:29
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Subir a FTP de forma remota (automatizado)

Benji:

Lo primero que debes hacer es familiarizarte con las funciones
ftp de php.

http://www.php.net/manual/en/book.ftp.php

Seguidamente haces un intento por desarrollar tu aplicacion y
si te falla o tienes problemas, entonces seria el momento perfecto
para ayudarte eficientemente.

Saludos
Franco
  #8 (permalink)  
Antiguo 06/03/2009, 08:42
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Subir a FTP de forma remota (automatizado)

Franco, muchas gracias por la recomendacion. Actualmente conozco el funcionamiento de las funciones de FTP como las de cURL para poder subir archivos de forma remota a un FTP.
Mi problema reside en que al ser automatizado el funcionamiento, solo conzco EL NOMBRE de la carpeta donde tengo que transferir los archivos, supongamos "X". pero NO SE donde se encuentra la carpeta "X" dentro del servidor del usuario, por lo que no se la ruta especifica a donde transferir los archivos.
  #9 (permalink)  
Antiguo 06/03/2009, 08:54
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Subir a FTP de forma remota (automatizado)

Bueno, creo que lo más recomendable es tener esto en orden, por ejemplo crear una carpeta donde estarán todas las carpetas de los diferentes usuarios (Cada uno verá solamente la suya), y ya sabes la dirección de esta carpeta, solo deberás concatenar el nombre de la carpeta.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #10 (permalink)  
Antiguo 06/03/2009, 09:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Subir a FTP de forma remota (automatizado)

Pues de alguna forma tienes que pedirle al usuario que te indique la ruta, si no como esperas "adivinar" la ruta, creo te va a resultar mucho más complicado a que si le dices al usuario donde poner el file.

Saludos
  #11 (permalink)  
Antiguo 06/03/2009, 10:04
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
El tema es que quiero evitar que el usuario me de la ruta (para que no haya ningun problema si tipeo mal la misma).

Por ahora lo unico que se me ocurre es buscar mi carpeta "x" dentro del servidor del usuario listando los directorios del FTP del mismo con la funcion ftp_nlist(). Es complicado, pero es lo que se me ocurre.

Gracias a todos

Bueno, aqui les dejo lo que logre hacer.

Tuve que recurrir a una busqueda dentro del FTP del usuario. Al principio esta la parte para conectarse al ftp del usuario. Mas abajo esta la funcion que hice para poder buscar la carpeta que necesitaba. Cuando la encuentra me retorna el path completo de la misma, permitiendome subir el archivo a la carpeta ya sea utilizando funciones de FTP o de cURL.

Muchas gracias a todos y espero que el codigo le sirva a alguien



Código:
# FUNCIONES FTP

# CONSTANTES
# Cambie estos datos por los de su Servidor FTP
define("SERVER","ftp.tusitio.com"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("USER","usuario"); //Nombre de Usuario
define("PASSWORD","passs"); //Contraseña de acceso
define("PASV",true); //Activa modo pasivo

# FUNCIONES

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


function obtenerDirectorios($ruta){

	$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
	$lista=ftp_nlist($id_ftp,$ruta); 
	$lista=array_reverse($lista); 
	$directorios = array();
	foreach ($lista as $item) directorio
		{
		$rutaItem = $ruta.'/'.$item;
		$tamano = ftp_size($id_ftp,$rutaItem);
		//Obtiene tamaño de archivo y lo pasa a KB
		if($tamano== -1) 
		{
			array_push($directorios,$item);
		}
	}
	ftp_quit($id_ftp); //Cierra la conexion FTP
	return $directorios; //Devuelve la ruta a la función
}


function buscar($dir,&$dir_a_buscar)
{   
	$directorios= obtenerDirectorios($dir); 
        foreach ($directorios as $d)
	{
        	if ( $d!="." AND $d!=".."  )
         	{
                	if ($dir_a_buscar == $d) 
	 		{
				return $dir.'/'.$d;
			}else{
				$r = buscar($dir.'/'.$d,$dir_a_buscar);
                                if ( basename($r) == $dir_a_buscar )
                                {
                	             return $r;
                         }
                 }       
           }
    }
    return FALSE;
}

$dir ='mi_directorio';

echo buscar('.',$dir);

Última edición por GatorV; 08/03/2009 a las 17:58
  #12 (permalink)  
Antiguo 06/03/2009, 13:18
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Subir a FTP de forma remota (automatizado)

Muchas Gracias por el aporte y de seguro será útil.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #13 (permalink)  
Antiguo 06/03/2009, 13:34
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Subir a FTP de forma remota (automatizado)

benji:

Primeramente, esta muy bueno tu codigo y espero utilizarlo
personalmente.

Referente esto ->

Cita:
Cuando la encuentra me retorna el path completo de la misma,
Tengo entendido que cuando se configura un servidor FTP, generalmente
se asigna un directorio especifico o mas de uno si asi lo amerita el caso
pero nunca he sabido que el servidor de ftp retorne ninguna ruta;
mas bien una vez que ingresa va a ser asi -> echo buscar('.',$dir);
como se observa '.' es el lugar de entrada no tienes forma de saber
los detalles especificos de esa ruta.
Ahora para depositar archivos en un subdirectorio de '.' entonces debes
crearlo siempre y cuando el servidor de ftp lo permita.

Saludos
Y espero nos ayude
Franco
  #14 (permalink)  
Antiguo 07/03/2009, 13:06
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Subir a FTP de forma remota (automatizado)

Franco, me alegro que te haya gustado el codigo y espero que sea de utilidad para agluien.
En relacion a :

Cita:
Cuando la encuentra me retorna el path completo de la misma,
creo que no me exprese muy bien que digamos.

Como bien vos decis, el servidor de FTP tiene asignado un directorio especifico dentro de la maquina y no retorna ninguna ruta. Yo quise decir que la funcion, cuando encuentra la carpeta buscada en el FTP del cliente, la funcion, retorna la ubicacion de la carpta buscada dentro del FTP.

Para poner un ejemplo del funcionamiento de la funcion, supongamos que deseamos encontrar la carpeta "experimento" dentro del FTP del cliente (obviamente ya tenemos a nuestra disposicion los datos de conexion al mismo, es decir: Usuario, Password y Host).

Entonces el uso de la funcion seria el siguiente:

Código:
$dir ='experimento';
echo buscar('.',$dir);
Como la funcion "buscar()" es recursiva, al darle como parametro el '.' le estoy diciendo que comienze a buscar en la carpeta raiz del FTP del cliente, en la de mayor jerarquia, lo cual me asegura que la busqueda se realizara en todo el FTP

Volviendo al ejemplo anterior, el resultado por pantalla podria ser el siguiente:

" ./www/imagenes/experimento"

Una vez que ya tenemos la ubicacion precisa de la carpeta "experimento" dentro del FTP del cliente, puedo subir cualquier archivo que desee sin ningun tipo de problema, ya sea utilizando las funciones de cURL o las de ftp, como el ftp_put()

Espero que haya servido para aclarar dudas.
Desde ya, muchas gracias
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 17:00.