martes, 18 de diciembre de 2012

Conectar a un FTP con PHP para cargar, descargar y eliminar archivos

Contactarse a un servidor FTP y realizar todo tipo de acciones sobre los archivos alojados remotamente es posible gracias a las funciones específicas del leguaje PHP para trabajar con este protocolo. A excepción del comando mget (varios get) prácticamente todo lo que se puede hacer desde una línea de comandos FTP se puede llevar a cabo de una forma muy sencilla, subir y bajar archivos, eliminarlos, listar directorios, etc.

Vamos a ver un pequeño ejemplo en el que realizaremos algunas de las operaciones típicas. Para ello primero establecemos una conexión con el servidor FTP remoto, a continuación iniciamos sesión indicando nuestras credenciales de acceso para poder, primero descargar un archivo remoto, después subir un archivo al servidor, eliminarlo y finalmente listar los archivos ubicados en el directorio raíz del FTP.

$host = 'ftp.servidor-remoto.com';
$user = 'mi_usuario';
$pass = 'mi_contrasena';
$remote_file = 'copia_remota.txt';
$local_file = $_SERVER['DOCUMENT_ROOT'] . '/sitio/copia_local.txt';

//conectarse al host
$conn = @ftp_connect($host);

//Comprobar que la conexión ha tenido éxito
if (!$conn) {
echo 'Error al tratar de conectar con ' . $host . "\n";
exit();
}
echo 'Conectado con ' . $host . "\n";

//Iniciamos sesión
$login = @ftp_login($conn, $user, $pass);
if (!$login) {
echo 'Error al intentar acceder con el usuario ' . $user;
ftp_quit($conn);
exit();
}
echo 'Conectado con el usuario ' . $user . "\n";

//obtenemos el archivo del servidor
if (ftp_get($conn, $local_file, $remote_file, FTP_BINARY)) {
echo 'El archivo ' . $local_file . ' se ha guardado.' . "\n";
} else {
echo 'El archivo ' . $local_file . ' NO se ha guardado.' . "\n";
}

//subimos un archivo al servidor remoto
$remote_file = 'copia_remota.txt';
$local_file = $_SERVER['DOCUMENT_ROOT'] . '/sitio/copia_local.txt';;

if (ftp_put($conn, $remote_file, $local_file, FTP_BINARY)) {
echo 'El archivo ' . $local_file . ' se ha cargado en el servidor remoto.' . "\n";
} else {
echo 'El archivo ' . $local_file . ' NO se ha cargado en el servidor remoto.' . "\n";
}

//borramos el archivo del servidor
if (ftp_delete($conn, $remote_file)) {
echo 'El archivo ' . $remote_file . ' ha sido borrado del servidor.' . "\n";
}

//obtenemos una lista con los archivos del servidor
$files = ftp_nlist($conn, '.');
foreach ($files as $file) {
echo $file . "\n";
}

//Cerramos la conexion
ftp_close($conn);