Constantemente nos encontramos bajando archivos de Internet: Un programilla que alguien nos recomienda, la foto de la modelo de moda o los clásicos MP3's . Sin darnos cuenta de uno u otro modo hacemos uso del protocolo FTP (File Transfer Prococol) para bajar archivos desde un Servidor. Descargamos más de los que subimos... en otras palabras "Tomamos más de los que damos". Esté artículo pretende explicarle el cómo subir -o permitir que sus usuarios suban (aporten) - archivos al Servidor usando las funciones FTP incluidas en el PHP. Recuerden el viejo dicho que cita: "Mas vale dar que recibir".
¿QUE ES EL FTP?Siglas de File Transfer Protocol o Protocolo de Transferencia de Archivos. Como su propio nombre lo indica, es un protocolo (perteneciente a TCP/IP) que se encarga de la transferencia de archivos entre computadoras conectadas en red. Al basarse en la arquitectura Cliente / Servidor, el FTP hace uso de dos componentes básicos:
*
Un cliente FTP. El cual se encarga de conectarse a un servidor FTP para descargar o subir archivos.
*
Un servidor FTP. Se encarga de procesar las peticiones de los clientes FTP, permitiéndoles descargar o subir archivos desde él.
Para conectarnos a un servidor FTP, y así poder realizar consultas en él, necesitaremos los siguientes datos:
*
Nombre del Servidor. Es la IP o Nombre del Servidor FTP al cual nos hemos de conectar, tal como: 65.134.10.5 o ftp.billysite.
net
*
Puerto. Número del puerto del servidor. Por defecto es 21.
*
Cuenta de Usuario. Es el nombre de la cuenta de usario que se nos ha asignado. Hay que asegurarse que cuenta con los permisos necesarios para subir o bajar archivos. De no tener una cuenta de usuario se puede acceder como usuario anónimo utilizando el nombre de usuario anonymous.
*
Clave de acceso. Es nuestra contraseña de cuenta de usuario. De acceder como usuario anónimo colocaremos como clave nuestro correo-e a manera de cortesía.
Una vez conectados al servidor FTP podremos hacer uso de su comandos para realizar las tareas que mejor creamos conveniente. Este artículo no pretende esbozar en gran medida el tema de FTP, al no ser éste el objetivo fundamental del mismo. Para més información sobre este aspecto le recomiendo revisar el árticulo de Michael Calore: "El ABC de la transferencia de archivos por Internet", disponible en el web site de WebMonkey.
FUNCIONES FTP EN PHP.PHP hace uso de funciones FTP para acceder aun servidor web, a manera de cliente. A continuación mostraremos las funciones básicas a usar en el script, así como una breve descripción de las misma. Si quiere mayor detalle de estas y otras funciones FTP le aconsejo consultar la documentación oficial del PHP, disponible en: http://www.php.net/docs.php.
Nota: Debe asegurarse que se encuentren habilitadas las funciones ftp en la configuración de la version de PHP que posee y de tener los permisos necesarios en su cuenta FTP para subir y bajar archivos.
CODIGO FUENTE./inc/ftpfunc.php.Script que contendrá las constantes y funciones a usar en index.php. En este script deberá modificar los valores de las constantes para ajustarlo a sus necesidades. La función ConectarFTP le permitirá conectarse al Servidor FTP; la función SubirArchivo tiene la tarea de subir un archivo al Servidor; y finalmente, la función ObtenerRuta le otorgará la ruta del directorio actual en el cual está trabajando el Servidor.
<?
# FUNCIONES FTP
# CONSTANTES
# Cambie estos datos por los de su Servidor FTP
define("SERVER","localhost"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("USER","willy"); //Nombre de Usuario
define("PASSWORD","12345"); //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 SubirArchivo($archivo_local,$archivo_remoto){
//Sube archivo de la maquina Cliente al Servidor (Comando PUT)
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor 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(){
//Obriene ruta del directorio del Servidor FTP (Comando PWD)
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
$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
}
?>
index.php.Script que contiene un formulario (form_ftp) que nos permite buscar un archivo y subirlo al Servidor FTP, además nos muestra una lista de los directorios y archivos del mismo.

<?php echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>::..Funciones FTP..::</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p align="center"><font size="5" face="Verdana, Tahoma, Arial"><strong><em>
Funciones FTP
</em></strong></font></p>
<p><font face="Verdana, Tahoma, Arial">
<?
include('inc/ftpfunc.php'); //Incluye el archivo de funciones
if(!empty($_POST["archivo"])){ //Comprueba si la variable "archivo" se ha definido
SubirArchivo($_POST["archivo"],basename($_POST["archivo"]));
//basename obtiene el nombre de archivo sin la ruta
unset($_POST["archivo"]); //Destruye la variable "archivo"
}
?>
<strong><font color="#000000" size="3">Subir Archivo</font></strong></font></p>
<hr />
<!--Formulario para elejir el archivo a subir -->
<form action="" method="post" name="form_ftp" id="form_ftp">
<p><font size="2" face="Verdana, Tahoma, Arial"> Elegir archivo :
<input name="archivo" type="file" id="archivo" />
<input name="Submit" type="submit" value="Subir Archivo" />
</font><font size="2" face="Verdana, Tahoma, Arial"> </font> </p>
</form>
<hr />
<p><font face="Verdana, Tahoma, Arial"><strong><font color="#000000" size="3">
Lista de Archivos
</font></strong></font></p>
<table width="69%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="48%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Nombre</strong></font></div></td>
<td width="22%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Tamaño</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificación</strong></font></div></td>
</tr>
<?
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
$ruta=ObtenerRuta(); //Obtiene la ruta actual en el Servidor FTP
echo "<b>El directorio actual es: </b> ".$ruta;
$lista=ftp_nlist($id_ftp,$ruta); //Devuelve un array con los nombres de ficheros
$lista=array_reverse($lista); //Invierte orden del array (ordena array)
while ($item=array_pop($lista)) //Se leen todos los ficheros y directorios del directorio
{
$tamano=number_format(((ftp_size($id_ftp,$item))/1024),2)." Kb";
//Obtiene tamaño de archivo y lo pasa a KB
if($tamano=="-0.00 Kb") // Si es -0.00 Kb se refiere a un directorio
{
$item="<i>".$item."</i>";
$tamano=" ";
$fecha=" ";
}else{
$fecha=date("d/m/y h:i:s", ftp_mdtm($id_ftp,$item));
//Filemtime obtiene la fecha de modificacion del fichero; y date le da el formato de salida
}
?>
<tr>
<td><font size="2" face="Verdana, Tahoma, Arial"><? echo $item ?></font></td>
<td align="right"><font size="2" face="Verdana, Tahoma, Arial"><? echo $tamano ?></font></td>
<td align="right"><font size="2" face="Verdana, Tahoma, Arial"><? echo $fecha ?></font></td>
</tr>
<? } ?>
</table>
</body>
</html>
Bueno, espero que éste aporte a al Comunidad Web les haya sido de utilidad, cualquier duda o sugerencia no duden en hacermesla llegar. Saludos.
Extraido de: http://www.desarrolloweb.com