• HomePagina Inicial
  • Blog Mis cosillas
  • Portfolio Mis trabajos
  • Acerca deeste blog y su autor
    • Sobre Mi 
    • Oridoki 
  • ContactarFormulario
  • Categorias

    • Blog
      • Control de Versiones
        • GIT
      • Diseño
      • Frameworks
        • CakePHP
        • CodeIgniter
      • JavaScript
        • EXT JS
        • JQuery
      • Magento
      • Maquetación
        • CSS
        • HTML
      • MiniCodes
      • MySQL
      • PHP
      • Proyectos
      • Sistemas
      • TextMate
      • Varios
      • Wordpress
    • Portfolio

PHP – Subir directorio FTP

Posted by Adrià Cidre Categories: Blog, PHP Tags: directorio, ftp, PHP

A veces es necesario por ejemplo realizar conexiones FTP desde PHP. Por ejemplo necesitamos subir un fichero a un servidor FTP periódicamente, pero no podemos estar pendientes de hacerlo cada día porqué sería una perdida de tiempo.

En estos casos es una buena idea realizar un pequeño script en PHP que haga lo que queramos y posteriormente lo podemos lanzar con un gestor de tareas como CRON (otro día hablaremos de esta fantástica herramienta).

Las funciones ftp que nos proporciona PHP las podéis encontrar aquí.

Sin embargo vamos a hacer un pequeño resumen para tener claras cuales son las más importantes.


# Realizamos la conexión	pasando como parametros el host y el puerto de acceso
$ftpID = ftp_connect('ftp://ftp.misitio.com', 21);

# Si la conexión es segura, necesitaremos facilitar el usuario y la contraseña
ftp_login($ftpID, 'mi_usuario','mi_contraseña');

# Definimos los directorios desde los que moveremos los datos
$path_remoto = '/path_remoto/mi_directorio/';
$path_local = '/path_local/mi_directorio';

# Creamos un directorio con la fecha actual
ftp_mkdir($ftpID, $path_remoto."/".date("Ymd"));

# Subimos el fichero miFichero.txt
ftp_put($ftpID, $path_remoto."/".date("Ymd").'/miFichero.txt', $path_local.'/miFichero.txt', FTP_ASCII);

# Y nos lo volvemos a descargar
ftp_fget  ($ftpID, $path_remoto."/".date("Ymd").'/miFichero.txt', $path_local.'/miFichero.txt', FTP_ASCII)

Entre las funciones que nos facilita PHP, la que más se echa de menos es la de subir un directorio entero. Por este motivo hoy vamos a implementar dicha función.


	# Función recursiva que devuelve un array con la estructura del directorio
	public function leerCarpeta($path)
		{
		$dh = opendir($path);
		$vCarpeta = array();
		while (($fichero = readdir($dh)) !== false)
			{
			if(!(preg_match('/^.{1,2}$/',$fichero)||preg_match('/^.svn[a-z,0-9]*$/',$fichero)))
				{
				if(is_dir($path.'/'.$fichero))
					{
					$vCarpeta[$fichero] = leerCarpeta($path.'/'.$fichero);
					}
				else
					{
					$vCarpeta[] = $fichero;
					}
				}
			}
		return $vCarpeta;
		}	

	# Función recursiva que sube todos los ficheros de un directorio y crea los directorios del mismo.
	public function subirCarpeta($vCarpeta, $path_remoto, $path_local, $ftpID)
		{
		foreach($vCarpeta as $campo=>$valor)
			{
			if(is_array ($valor))
				{
				// Creamos un directorio
				ftp_mkdir($ftpID, $path_remoto.'/'.$campo);
				subirCarpeta($valor, $path_remoto.'/'.$campo, $path_local.'/'.$campo, $ftpID);
				}
			else
				{
				// Submios el fichero
				ftp_put($ftpID, $path_remoto.'/'.$valor, $path_local.'/'.$valor, FTP_ASCII);
				}
			}
		}

	# Probemos el código
	$ftpID = ftp_connect('192.168.0.115',21);
	ftp_login($ftpID,'docseo','comberry');

	$path_local = "/miPath/miDirectorio/";
	$path_remoto = '/miPath/miDirectorioDestino/';

	ftp_mkdir($ftpID, $path_remoto);

	$vCarpetas = leerCarpeta($path_local);
	subirCarpeta($vCarpetas, $path_remoto, $path_local, $ftpID);
	ftp_close($ftpID);

La recursividad siempre es una herramienta compleja y peligrosa, pero utilizada correctamente es de las mas potentes que existen en un lenguaje de programación.

Creo que esto es todo por ahora.

Share This Post!

Subscribe to our RSS feed. Tweet this! StumbleUpon Reddit Digg This! Bookmark on Delicious Share on Facebook

Deja un comentario Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Search our website

  • Inicio
  • Blog
  • Consultor Web
  • Contactar
  • E-Commerce
  • Oridoki
  • Outsourcing
  • Portfolio
  • Sobre Mi
  • Social Media
© Adrià  Cidre Jugo - 2011