Uso del FTP con PHP

Se explican las funciones para realizar transferencia de archivos, utilizando el protocolo FTP, desde páginas PHP. Ejemplo de código para aprender a subir archivos al servidor.
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.

Función
Sintaxis
Descripción
ftp_connect int ftp_connect ( string host [, int port])
host: Nombre o IP de Servidor FTP.
port: Puerto, por defecto 21.
Establece una conexión FTP al host especificado.
ftp_login int ftp_login( int ftp_stream, string username, string password)
ftp_stream: Manejador FTP obtenido con ftp_connect.
username: Nombre de usuario.
password: constraseña de usuario.
Comienza la sesion en una conexión FTP.
ftp_pasv int ftp_pasv ( int ftp_stream, int pasv)
ftp_stream: Manejador FTP obtenido con ftp_connect.
pasv: Si es TRUE activa el modo pasivo, si es FALSE lo desactiva.
Activa o desactiva el modo pasivo. En modo pasivo, las conexiones de datos son iniciadas por el cliente, en lugar de ser iniciadas por el servidor.
ftp_pwd int ftp_pwd ( int ftp_stream)
ftp_stream
: Manejador FTP obtenido con ftp_connect.
Devuelve el nombre del directorio actual.
ftp_put int ftp_put ( int ftp_stream, string remote_file, string local_file, int mode)
ftp_stream: Manejador FTP obtenido con ftp_connect.
remote_file: Nombre con el cual se guardará el archivo en el Servidor FTP.
local_file: Archivo local que se encuentra en la máquina cliente.
mode: Modo de transferencia, puede ser FTP_ASCII o FTP_BINARY.
Sube un fichero al Servidor FTP.
ftp_nlist int ftp_nlist ( int ftp_stream, string directory)
ftp_stream: Manejador FTP obtenido con ftp_connect.
directory: Ruta del directorio a listar.
Devuelve una lista de ficheros del directorio dado.
ftp_size int ftp_size ( int ftp_stream, string remote_file)
ftp_stream: Manejador FTP obtenido con ftp_connect.
remote_file: Nombre del archivo en el Servidor FTP.
Devuelve el tamaño del fichero especificado. No todos los servidores soportan esta característica.
ftp_mdtm int ftp_mdtm ( int ftp_stream, string remote_file)
ftp_stream: Manejador FTP obtenido con ftp_connect.
remote_file: Nombre del archivo en el Servidor FTP.
Devuelve la fecha de última modificación del fichero especificado. No todos los servidores soportan esta característica
ftp_quit int ftp_quit ( int ftp_stream)
ftp_stream: Manejador FTP obtenido con ftp_connect.
Cierra una conexión FTP

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&ntilde;o</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificaci&oacute;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="&nbsp;";
$fecha="&nbsp;";
}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.

Autor

William Wong Garay

Profesional en Computación e Informatica. Especialista en desarrollo web.

Compartir

Comentarios

davud

21/11/2005
Muy bueno y completo, y a prueba de principiantes :) gracias.

surr0und

16/3/2006
Hola, muy bueno el tutorial.

Este error

"Parse error: parse error, unexpected T_DNUMBER, expecting ',' or ';' in /home/" es por el <?php echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; ?>

se produce porque falta la barra invertida antes de las comillas, ya que se trata de la función echo.

Se soluciona dejando la linea asi:

<?php echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; ?>

Saludos.

Daniel Izquierdo

22/5/2006
Pues a mi me va todo bien, el unico error que le he encontrado es que la variable MODO no esta definida, esta mal puesta.
Teneis que cambiar:

define("PASV",true); //Activa modo pasivo

po esto otro:

define("MODO",true); //Activa modo pasivo

Asi me va todo perfecto.

Miguel FR

21/6/2006
Despues de muchas pruebas y devanarme la cabeza he encontrado lo siguiente: Primero que al formulario le falta enctype="multipart/form-data". Con eso las cosas empiezan a ir mejor. Pero el asunto seguia sin funcionar (ni en hosting Windows ni Linux). La idea de Pedro Castro me llamo la atencion y he probado con el plan $local = $_FILES["archivo"] en lugar de $local = $_POST["archivo"]. He buscado por ahi otras cosas y he adaptado un poco el tema. Por tanto: He quitado la funcion subir archivo y antes del formulario he puesto: include('ftpfunc.php'); //Incluye el archivo de funciones
if(!empty($_FILES["archivo"])){ //Comprueba si la variable "archivo" se ha definido
ftp_chdir($id_ftp, "public");
$local = $_FILES["archivo"]["name"];
$remoto = $_FILES["archivo"]["tmp_name"];
$tama = $_FILES["archivo"]["size"];
$ruta = "/inetpub/webs/archivoswebnet/public/" . $local;
if (is_uploaded_file($remoto)){
copy($remoto, $ruta);
}
else {
echo "no se pudo subir el archivo " . $local;
} }
ftp_close($id_ftp);
unset($_FILES["archivo"]); //Destruye la variable "archivo"
?>
El formulario y lo de despues sigue igual.
Esta adaptacion me funciona en Hosting Windows y en directorios que tengan permiso publico.Salu2.

Carlos Arias

24/7/2006
Muy buen ejemplo justo lo que necesitaba, para evitar errores haganlo por partes y veran que funciona !

alvaro

05/10/2006
Bien amigos, si existen algunos errores en el código de ejemplo, pero son facilmente solucionables. Bien en principio como se advierte comentarios arriba el form debe contener:

enctype="multipart/form-data"

Para que funcione.

Por otra parte, en mi caso, retire function SubirArchivo(), porque existe un error en la forma en que esta pasa las variables al metodo ftp_put(), dejando inmediatamente abajo del include('ftpfunc.php'); el siguiente código:

if(!empty($HTTP_POST_FILES["archivo"])){
$file = $HTTP_POST_FILES["archivo"]["tmp_name"];
$base_archivo = basename($HTTP_POST_FILES["archivo"]["name"]);
$g_archivo = "[ruta de la carpeta para subir el archivo]" . $base_archivo;
$id_ftp=ConectarFTP();
$upload = ftp_put($id_ftp, $g_archivo, $file, FTP_BINARY);
if (!$upload) {
$status = "Error al guardar: " . $g_archivo;
} else {
$status = "Exito al gaurdar: " . $g_archivo;
}

unset($HTTP_POST_FILES["archivo"]);
ftp_quit($id_ftp);

en este caso la variable $status informa sobre el éxito o fracaso de subir el archivo. No es recomendable poner dentro de if e if else el comando echo. Busca ponerlo en la parte de abajo del código original fuera del table.

Recuerda que $_FILE y $HTTP_POST_FILES, se usan de manera indistinta, dependiendo de la versión de php en el servidor. Cosa muy importante es saber si tu servidor tiene habilitados los comandos ftp en el php.ini, o lo clasico en este caso el comando phpinfo(); para saber si tu server tiene habilitado los comandos ftp de php.

Saludos

ALEJANDRO

29/10/2006
ya me funciono.... al parecer es muy cierto... no hay que referenciar variables tipo file oomo $_POST["archivo"]) si no como
$HTTP_POST_FILES["archivo"] y tambien debe ponerse el enctype="multipart/form-data". las 2 cosas deben ser cambiadas...

para los que su codigo no HACE nada es por que no ponen el encytype a mi me paso.

y le hice unos cambios al codigo apoyado con otro codigo que encontre por ahi en otra portal.

en breve lo posteare.

referente a la carpeta.. no tengo ningun problema, me sube y me baja archivos en cualquier carpeta que seleccione como compartida desde el filezilla. checa tu configuracion de "Users" y en "shared folder" con "add"anexa la carpeta que quieres compartir y una vez adicionada, con un clic derecho sobre la ruta de la carpeta aceptada ponla como SET AS HOME DIR. para que sea la predeterminada.

En una conexion ftp cuando se tomara esta carpeta como la raiz y si ordenas con las funciones FTP en php que cambie de directorio u otra cosa y debes tener presente que la carpta onde estas parado inicialmente al conectarte FTP es la que seleccionaste como SET AS HOME.

ademas en esa misma seccion ("shared folder") puedes otorgar atributos de los usuarios sobre las carpetaas y los archivos.... seleccionas el usuario(si no existe lo agregas con add) y puedes posteriormente otorgarle atributos de borrado, creacion, escritura y actualizacion de ficheros, asi como creacion y borrado de carpetas entre otras cosas... si piensas administrar un grupo en vez de la opcoon user ve a la opcion group que es muy similar pero sirve para administrar grupos... no se como funcione lo estoy checando...

SUERTE y espero el comentario sirva.

da gusto encontrar este tipo de portales.... que digo tipo de portales.... mejor dicho portal, siempre que requiero algun tipo de informacion siempre encuentro asesoria en Desarrolloweb.. en hora buena...Creo vale la pena considerar comprar algun curso de los que tienen.

SALUDOS

ViK-ThOr

24/12/2006
Aqui tienen el codigo como me funciono a mi, no usando la funcion subir archivo, y poniendo un codigo en lugar de ello inmediatamendte despues del include, espero les sirva saludos

<?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('ftpfunc.php'); //Incluye el archivo de funciones
if(!empty($HTTP_POST_FILES["archivo"])){
$file = $HTTP_POST_FILES["archivo"]["tmp_name"];
$base_archivo = basename($HTTP_POST_FILES["archivo"]["name"]);
$id_ftp=ConectarFTP();
$upload = ftp_put($id_ftp, $base_archivo, $file, FTP_BINARY);
if (!$upload) {
$status = "Error al guardar: " . $base_archivo;
} else {
$status = "Exito al gaurdar: " . $base_archivo;
}
unset($HTTP_POST_FILES["archivo"]);
ftp_quit($id_ftp);
}
?>
<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" enctype="multipart/form-data">
<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&ntilde;o</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificaci&oacute;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="&nbsp;";
$fecha="&nbsp;";
}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>

Jhony Alexander Duque

23/5/2007
Los felicito el ejemplo esta muy bueno.

voy a aclarar algo con lo que muchos han tenido problema y es con esta linea al principio del codigo del index;
<?php echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; ?>

el problema es que si empezamos donde dice version con comillas dobles (""), pues estariamos cerrando el echo; yo lo solucione asi; cambiando las comillas dobles dentro del echo por comillas sencillas.

<?php echo "<?xml version='1.0' encoding='iso-8859-1'?".">"; ?>


bueno por ultimo coloco el codigo ya funcionando ( Como me funciono a mi).

index.php

<?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($HTTP_POST_FILES["archivo"])){
$file = $HTTP_POST_FILES["archivo"]["tmp_name"];
$base_archivo = basename($HTTP_POST_FILES["archivo"]["name"]);
$id_ftp=ConectarFTP();
$upload = ftp_put($id_ftp, $base_archivo, $file, FTP_BINARY);
if (!$upload) {
$status = "Error al guardar: " . $base_archivo;
} else {
$status = "Exito al gaurdar: " . $base_archivo;
}
unset($HTTP_POST_FILES["archivo"]);
ftp_quit($id_ftp);
}
/*if(!empty($HTTP_POST_FILES["archivo"])){ //Comprueba si la variable "archivo" se ha definido
SubirArchivo($HTTP_POST_FILES["archivo"],basename($HTTP_POST_FILES["archivo"]));
//basename obtiene el nombre de archivo sin la ruta
unset($HTTP_POST_FILES["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" enctype="multipart/form-data">
<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&ntilde;o</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificaci&oacute;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="&nbsp;";
$fecha="&nbsp;";
}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>


ftpfun.php

<?
# 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","jhonyduque"); //Nombre de Usuario
define("PASSWORD","123456"); //Contraseña de acceso
define("MODO",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
}
?>


recuerda colocar el archivo ftpfun.php en la carpeta inc.

bueno simplemente copias y pegas y listo ya funciona!!!!!

Mike FLT

06/6/2007
Utilizando el codigo que puso nuestro amigo ViK-ThOr el dia 24/12/06 me anduvo perfectamente!!!

Lo unico que me pasa es que cuando intento subir archivos muy pesados (20MB) no me los sube.
Alguna solucion a esto?

pedro morales glez

15/8/2007
PONGO A SU DISPOSICIÓN EL CÓDIGO ARREGLADO PARA LA NUEVA VERSIÓN DE PHP Y QUE SÍ FUNCIÓNA,SOLAMENTE PARA UTILIZARLO QUITEN LOS SIGNOS DE # AL INICIO Y FINAL DEL CODIGO.
EL INDEX.PHP ES
#<?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('ftpfunc.php'); //Incluye el archivo de funciones
if(!empty($HTTP_POST_FILES["archivo"])){
$file = $HTTP_POST_FILES["archivo"]["tmp_name"];
$base_archivo = basename($HTTP_POST_FILES["archivo"]["name"]);
$id_ftp=ConectarFTP();
$upload = ftp_put($id_ftp, $base_archivo, $file, FTP_BINARY);
if (!$upload) {
$status = "Error al guardar: " . $base_archivo;
} else {
$status = "Exito al gaurdar: " . $base_archivo;
}
unset($HTTP_POST_FILES["archivo"]);
ftp_quit($id_ftp);
}
?>
<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" enctype="multipart/form-data">
<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&ntilde;o</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificaci&oacute;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="&nbsp;";
$fecha="&nbsp;";
}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>#

Y EL FTPFUNC.PHP ES EL SIGUIENTE
#<?
# FUNCIONES FTP
# CONSTANTES
# Cambie estos datos por los de su Servidor FTP
define("SERVER","AQUI SU DOMINIO"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("USER","AQUI SU NOMBRE DE USUARIO"); //Nombre de Usuario
define("PASSWORD","AQUI VA LA CONTRASEÑA"); //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
ftp_quit($id_ftp); //Cierra la conexion FTP
return $Directorio; //Devuelve la ruta a la función
}
?>#

ESPERO LES SEA DE AGRADO Y UTILIDAD ES EL MISMO CODIGO QUE ARRIBA PERO ARREGLADO A FUNCIONAR A LA PRIMERA. SUERTE PROGRAMADORES PRINCIPIANTES!!!!
:)

Roxana

16/9/2007
Muy bueno el ejemplo. Me funcion perfecto.
Ahora me gustaria agregarle una pantallita previa para que el usuario ingrese un usuario y una contraseña. Alguien tiene un ejemplo?
Al principio podria ser una validacion en duro de usuario y contraseña... aunque lo definitivo es manejar una pequeña base de datos,

Saludos!!

Sergio Vladimir

23/10/2007
Gracias por el codigo ami me funciono sin problemas. solo tengo una observacion mejor nombren el archivo FTPFUNC.PHP con minusculas por que ami no me reconocia promimero luego lo cambie por ftpfunc.php y corrio normal esto en el servidor de tripod.lycos.es

Gracias!!!

diego

29/11/2007
alguien conoces el lugar para indicar una carpeta determinada? ej: wwwroot/img/

Donde he de poner la linea de código?

ncc

11/1/2008
En lo personal me sirvió bastante este artículo y sólo si quieren agregar el cambio de directorio o algo parecido utilizan:

ftp_chdir($id_ftp, "/ruta/de/archivos");

en la función ConectarFTP() que tiene el código, la ruta la pueden pedir al usuario o definirla.

Pascual

15/2/2008
A mi no me funcionaba, y he cambiado $HTTP_POST_FILES por
$_FILES y ha funcionado correctamente.
Gracias poreste valioso código

jocual

29/11/2008
el codigo de Jhony Alexander Duque es el que me funcioné con servidor apache.

Flashermx

17/12/2008
<?php echo "<?xml version="."1.0". "encoding=iso-8859-1?>";
no me gusta ser presuntuoso

GREGORIO

28/1/2009
Todo mien pero cuando intento subir algun archivo al sevidor ftp no me funciona y no me arroja ningun error

Leonardo

12/2/2009
Como hacer para que funcione en Windows XP

julio

08/3/2009
Y hay alguna adecuación para que funciones en un servidor linux?

azuel

23/3/2009
hola el articulo me parece muy bueno pero me podrias aclarar en la funcion "ObtenerRuta" como puedo hacer para que en vez de que salga la raiz yo pueda modificarla para poner la q yo quiera gtacias y me de nuevo me parece q es un codigo muy bueno

Educs

12/4/2009
He seguido todos sus comentario en cuanto al codigo
Hola a todos he seguidos todo el tutorial pero aun no me funciona el codigo..claro qye en realidad me llego a conectar con el FTP de mi servidor pero cuando subo algun archivo no me hace ni un efecto ni nada d nada simplemente veo mi tala y todo las carpetas de mi FTP alguien me puede ayudarrrrrrrrr ??? Ya estoy loco-.....

miguel_chang

24/4/2009
FTP con PHP
Muchas gracias por el aporte tan util. Cuando intento subir por ejemplo un archivo de 32.4 MB lo subio con exito, pero al final despues de terminar la subida me aparecio el error de que se habian sobrepasado los 30 segundos de la conexion... alguien sabe como solucionarlo?

Carlos

26/5/2009
Consulta
Excelente el tutoria...Yo no se progrmar y lo pude hacer andar. Solo quisiera saber como hacer para que los archivos no me los guarde en el raiz sino que quiero que me los guarde en una carpeta que yo determine. Muchisimas Gracias!!!

Lolleidata

14/7/2009
Ruta por defecto
Una pregunta, estaba mirando de colocar yo la carpeta o la ruta FTP que quiero que cargue.

como lo puedo hacer? ahora carga desde la raiz.

He probado cosas pero no lo se! gracias!

floro

12/8/2009
Imposible que funcione
Estoy a punto de cortarme las venas, llevo dos dias y no consigo que funcione la subida de archivos, siempre me sale este error en varias lineas

Warning: ftp_login() expects parameter 1 to be resource, boolean given in D:Inetpubwebsitsciudadrealnetftpfunc.php on line 16

Soy mas que novato en PHP, pero me aburre tanto problema.
¿Alguien me puede ayudar? GRACIAS

Andres

21/9/2009
Funcion ftp_get
Con animo de actualizar un poco las funciones del ftp, haria falta incluir la funcion q' permite traer archivos desde el ftp, acontinuacion la menciono:

ftp_get ( resource $secuencia_ftp , string $archivo_local , string $archivo_remoto , int $modo [, int $pos_reanudar ] )

ftp_get() recupera un archivo remoto desde el servidor FTP, y lo almacena e un archivo local.

Un saludo y gracias por la documentacion.

Ivan

23/9/2009
Solucion
Sólo tienes que llamar a la función

set_time_limit(0);

en tu script php.

El valor pasado a la función son los segundos que permites de ejecución. El 0 es para tiempo ilimitado.

roberto

16/10/2009
Gracias
Muy buen aporte amigos gracias me funciona de maravilla eso de elegir directorio buenisimo

roberto

16/10/2009
Ruta por defecto Por: Lolleidata
mira este es el codigo para que te carge el archivo donde quieras
solo modifica esto por tu ruta /httpdocs/img/close
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
ftp_chdir($id_ftp, "/httpdocs/img/close");
return $id_ftp; //Devuelve el manejador a la función
}

GReG

03/11/2009
Duda
y podes decirme que se coloca en form action, que ya hice todo pero no carga ningun archivo >.<

Juan Rogés

11/11/2009
Muy buen aporte
Muy bien explicado. No has dejado una duda.
Felicidades y muchas gracias!!

darklet

26/11/2009
descargas
Serias tan amable de decirme como se introduciria las descargas en este codigo para ir aprendiendo que por mas que lo intento no me sale me seria de gran ayuda que estoy desquiciado ya jajaja

Jose María

20/4/2010
Límite de tiempo PHP
Con la sentencia:

set_time_limit(0);

Podemos impedir que el límite de tiempo predeterminado de ejecución de un script PHP (30 segundos) interrumpa una subida o bajada de archivo grande.

Víctor

02/6/2010
servidor local ftp ayuda!!
Yo no entiendo mucho pero estoy intentando hacer un servidor local ftp que sirva determinadas carpetas a los usuarios dependiendo de su identificacion y su clave y al probar esto en mi ordenador me da estos errores: :S ayuda por favor!!
Warning: include(ftpfunc.php) [function.include]: failed to open stream: No such file or directory in C:AppServwwwftp.php on line 15

Warning: include() [function.include]: Failed opening 'ftpfunc.php' for inclusion (include_path='.;C:php6pear') in C:AppServwwwftp.php on line 15
Subir Archivo

enrique

28/6/2010
Como puedo subir files a una carpeta
Como puedo subir files a una carpeta en el raiz llamada upload
En donde he de poner la ruta.

OG

23/8/2010
Gracias!!
Hey muchas gracias, estaba buscando algo para ahorrar espacio en mi servidor. . .con Badongo (FTP) y este articulo lo logré, gracias :D

Diego Tabares

26/8/2010
uso ftp con php
solo tengo una pregunta, existe algun problema con el tamaño de los archivos...
es decir no pone problema este codigo para subir archivos pesados?'

gracias

stramin

25/10/2010
Código incorrecto
Tu error es por la configuración del tiempo de ejecución de script que tiene el servidor PHP, por que la verdad, sinceramente y lamentablemente para todos, este código no sube archivos por FTP, los sube al servidor por HTTP y luego solo los mueve con FTP, cosa innecesaria ya que se pueden mover mas fácilmente con un move() o move_uploaded_file.

Llevo 2 días buscando alguna pagina que explique como subir archivos por FTP y no aparece ninguna que sirva, todas son por HTTP.

Campos

11/3/2011
No me Funciona
Pues yo lo siento mucho pero no me funciona

Adrián

31/1/2012
y para añadir poder bajar archivos?
Después de algunas modificaciones también me va muy bien el codigo,ahora bien,me gustaria poder añadir la opción de poder bajarse archivos a la inversa,del servidor a cliente por php ftp,alguien me ayuda partiendo del mismo codigo que hay aqui?

>hahaha

02/2/2012
>hahaha
''><h1>hahaha

Volkodlak

16/2/2012
Necesito algo de ayuda
Quisiera poder usar este script para subir algun archivo desde mi pc a una cuenta en wupload.com que me permite subir desde ftp o mediafire que tambien lo permite... (aunque por ahora prefiero wupload)
la idea es permitir que yo y todos los usuarios de mi web podamos subir desde ahi, pero sin necesidad de facilitarles mis datos...
algo asi como lo que tenia megaupload... con su servicio filebox....

cómo tendría que hacerle para conseguir algo asi??
gracias de antemano :)

AsderPunk

11/7/2012
Muy buen código
//Aqui dejo todo ya funcionando
// index.php

<?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('ftpfunc.php'); //Incluye el archivo de funciones
if(!empty($_FILES["archivo"]))
{
$file = $_FILES["archivo"]["tmp_name"];
$base_archivo = basename($_FILES["archivo"]["name"]);
$id_ftp=ConectarFTP();
ftp_chdir($id_ftp, "www/ftp_upload");
$upload = ftp_put($id_ftp, $base_archivo, $file, FTP_BINARY);
if (!$upload) {
$status = "Error al guardar: " . $base_archivo;
} else {
$status = "Exito al gaurdar: " . $base_archivo;
}
unset($_FILES["archivo"]);
ftp_quit($id_ftp);
}
/*if(!empty($HTTP_POST_FILES["archivo"])){ //Comprueba si la variable "archivo" se ha definido
SubirArchivo($HTTP_POST_FILES["archivo"],basename($HTTP_POST_FILES["archivo"]));
//basename obtiene el nombre de archivo sin la ruta
unset($HTTP_POST_FILES["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" enctype="multipart/form-data">
<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&ntilde;o</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificaci&oacute;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="&nbsp;";
$fecha="&nbsp;";
}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>

********************************************************************

//ftpfunc.php
<?
# 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","usuario"); //Nombre de Usuario
define("PASSWORD","password"); //Contraseña de acceso
define("MODO",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
ftp_chdir($id_ftp, "www/ftp_upload");
$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
}
?>

Samuel

17/8/2012
PUEDE ALGUIEN ENVIAR EL CODIGO COMPLETO SIN ERRORES?
PUEDE ALGUIEN ENVIAR EL CODIGO COMPLETO SIN ERRORES A mi email:

samuel_saldana@yahoo.com

Muchas gracias

oscar

28/8/2012
Exelente explicacion, te agradesco mucho
Exelente explicacion, te agradesco mucho

Pascual Pi

05/3/2013
Excelente sript para subir ficheros FTP
Buenisimo, yo no soy experto pero le realiado dos toques para adaptarlo a mi gusto y me funciona fenomenal, gracias por tu aporte a la comunidad, solamente si incluyes un boton de borrar, seria ya la bomba, simple y eficaz

jon

04/6/2014
ayuda
ayuda en donde se agrega la ftpfunc.php

smorgerbowrg

28/8/2014
otro error en el codigo
no me funcionaba y no me funcionaba, hasta que analice el codigo y vi q le faltaba el php en las etiquetas de php...

<? } ?>
solo le puse:

<?php } ?>

espero y les sirva

smorgerbowrg

28/8/2014
reafirmanco correccion
exactamente, yo trabajo con php 5.5 corriendo en ubuntu y cuando solo pongo las etiuetas <? ?> no funciona php, tengo que ponerle a todos los <?php ?> en todas las etiquetas del archivo y de todos los archivos que contengan las etiquetas, solo lo cambio y funciono de maravilla, gracias al autor de este post... y suerte a todos.

DS1988

03/11/2014
fichero o directorio /home/willy/
Estimado

como se hace , nombre de fichero muestra /www/ftp_upload/hola.txt pero quiero el nombre SOLO EL NOMBRE (hola.txt) no mas??
ftp_chdir($id_ftp, "www/ftp_upload");

Ayudame plis

CARLOS DIOSES CHAVEZ

16/11/2015
que librerías uso para hacer lo mismo con un SFTP
que librerías uso para hacer lo mismo con un SFTP

Araceli143

27/4/2016
Como personalizar este código para que sólo acepte archivos 7z
Hola, Buen día....
Aquí con una gran pregunta, espero me puedan aclaran mi duda, como le puedo hacer para que este código solo me acepte archivos con exención 7z??... Me urge... Gracias de antemano

Gravense

14/6/2016
Ubuntu no funciona
cuando lo ejecuto en windows sale todo perfecto, lo quiero pasar a ubuntu y me sale esto

Lista de Archivos

El directorio actual es: ".$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="".$item.""; $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 } ?>
Nombre
Tamaño
Fec. Modificación

Alguien me puede ayudar ?

juan carlos

20/11/2017
registrar usuario
buenos días.
En primer lugar, gracias por el aporte.
El post ya lleva un tiempo pero lo he encontrado de utilidad.
Tengo una pregunta ¿cómo puedo hacer para registrar qué usuario fué el que subió el archivo?
Me refiero a crear una columna nueva y añadir una variable que ya tengo declarada en la aplicación, pero no sé como hacer para que se guarde como atributo de cada línea.

gracias.

Leonardo

17/2/2018
Conectarme a ftp por file key
Hola disculpen gran post mi duda es que si yo puedo realizar la conexión por key file como se haria con el protocolo sftp - ssh??