HTMLpointHTMLpoint HTMLpoint.com


 Funciones relacionadas con el protocolo FTP



Entre los protocolos que PHP nos pone a disposición existe una amplia biblioteca de funciones relacionadas con el protocolo FTP (FILE TRANSFER PROTOCOL), para el traslado de un archivo de un ordenador a otro en la red. Vamos a ver las principales.

ftp_connect

Ésta es una función "principal" en el sentido de que nos permite establecer una conexión FTP entre nuestro equipo y el servidor FTP remoto. Su sintaxis es:

$stream = ftp_connect(host, port);

en el que el huésped es el nombre del servidor al que queremos conectarnos y port (opcional) es la puerta alternativa a la que nos queremos conectar. Si ésta no se ha especificado se utiliza la puerta de default para el protocolo FTP, es decir la 21. En la variable $stream, además, se almacenan precisamente el flujo de datos que el cliente (en este caso el PHP) recibe del servidor, es decir, los mensajes de conexión aceptada (incluidos los detalles) o de conexión rechazada.

Por ejemplo, para conectarnos a la puerta de default del servidor FTP "ftp://ftp.host.com" utilizaremos:

$stream = ftp_connect("ftp://ftp.host.com");

ftp_login

Después de la conexión, necesitamos identificarnos de forma que el servidor nos permita el intercambio de datos. Muchos estarán acostumbrados a no ver esta fase porque con los más difundisos clientes FTP gráficos se desarrolla automáticamente utilizando las informaciones de login (nombre dle usuario y contraseña) introducidos como opciones para la conexión. Sin embargo, hay que saber que ésta es una fase muy importante para la conexión. La sintaxis de la función es:

$login = ftp_login(stream, username, password);

Si, por ejejmplo, antes nos habíamos conectado al huésped "ftp.host.com", utilizando la variable "$stream", ahora podemos pasar al login verdadero con:

$login = ftp_login($stream, "usuario", "contraseña");

La variable $login nos sirve para entender si el login se ha llevado a cabo o no, y si incluye el valor "1" para el éxito, "0" para el fracaso. Por ejemplo, para ver si continuamos el intercambio de datos después de la autorización podemos utilizar el valor que se ha dado a esta variable y escribir:

if ($login == "1") {
... # Ejecutar las demás operaciones
} else {
echo "Autorización no llevada a cabo\n";
}


Cuando nos hemos conectado, podemos saber sobre qué equipo estamos trabajando con la función "ftp_systype()" que tiene la sintaxis:

$system = ftp_systype($stream);
ftp_pwd

Esta función invoca el mando "pwd", es deicr, "Print work directory", que podemos traducir como "Visualiza el directorio actual". Para ver a qué directorio nos conectamos después del login, podemos escribir:

$directory = ftp_pwd($stream);

en el que $stream es siempre la variable que hemos utilizado para la conexión con "ftp_connect()".
ftp_cdup e ftp_chdir

Estas dos funciones sirven respectivamente para moverse en el directorio superior y para moverse hacia un determinado directorio dentro del servidor.
La primera se utiliza con sintaxis:

$var = ftp_cdup($stream);

La segunda, en cambio:

$newdir = ftp_chdir($stream, "nuevo_directorio");

Si, por ejemplo, en el login estamos en el directorio "/" y queremos movernos a "/var/wwwdata" podemos escribir:

$newdir = ftp_chdir($stream, "/var/wwwdata");

ftp_mkdir e ftp_rmdir

Estas dos funciones invocan el mando "mkdir "(crea un directorio) y "rmdir" (quita un directorio). La primera devuelve el nombre del nuevo directorio, la segunda sólo los valores true o false. Podemos crear un pequeño buqle y escribir:

$mydir = ftp_chdir($stream, "/var/wwwdata/");
# Posicionarse en "/var/wwwdata".
$newdir = ftp_mkdir($stream, "prueba")
# Crear un directorio "prueba" como subdirectorio de "/var/wwwdata"
$deleted_dir = ftp_rmdir($stream, $newdir);
# Borrar el directorio creado
# Controlarlo todo:
if ($deleted_dir == "1") {
print "Operación llevada a cabo con éxito.\n";
} else {
print "Algo no ha salido bien.\n";
}


Obviamente el ejemplo no tiene mucho sentido en una verdadera conexión (¿por qué crear un directorio y borrarlo en seguida?), pero se ha propuesto para comprender cómo utilizar mejor estas dos funciones.

ftp_nlist

Esta función es igual al mando "dir", es deicr, el mando utilizado para ver los nombres de los archivos que están en un directorio. La sintaxis es:

$list = ftp_nlist($stream, directory);

Por ejemplo, podemos ir al directorio "/var/wwwdata" y leer los archivos con:

$newdir = "/var/wwwdata";
$list = ftp_nlist($stream, $newdir);


Los resultados están en un array, por lo tanto, 'echo "$list"' no tendría ningún sentido.

ftp_get

Función que invoca el mando GET, para bajar un archivo del servidor remoto. Tenemos que especificar para la función, además del conocido stream, el nombre del archivo local, el nombre del archivo remoto y las modalidades de trasaldo (FTP_ASCII o FTP_BINARY). La sintaxis completa es:

$file = ftp_get($stream, local_filename, remote_filename, mode);

Por ejemplo, si queremos bajar del servidor el archivo "data.txt" (supongamos que estamos ya en el directorio que lo incluye) introduciéndolo en el directorio "/tmp" con nombre "file.txt" in ASCII mode, escribiremos:

$file = ftp_get($stream, "/tmp/file.txt", "data.txt", FTP_ASCII);

Para ver si la operación ha tenido éxito o no, podemos actuar de dos formas: controlar si efectivamente el archivo está en nuestro disco o controlar el valor de la variable $file: si tiene valor "1" entonces la operación se ha llevado a cabo, si tiene valor "0" ningún archivo se habrá bajado en nuestro disco.

ftp_put


Esta función hace exáctamente lo contrario de "ftp_put()", es decir, carga un archivo en el servidor. Su sintaxis es:

$file = ftp_put($stream, remote_filename, local_filename, mode);

Las opciones son iguales a las anteriores, por lo tanto, podemos poner el ejemplo contrario al anterior: cargamos el archivo local "/tmp/file.txt" en el directorio remoto (ya estamos en este directorio) con el nombre "data.txt". Todo en ASCII mode obviamente:

$file = ftp_put ($stream, "data.txt", "/tmp/file.txt", FTP_ASCII);

También aquí podemos controlarlo de dos formas: evaluando el valor de $file o invocando la función "ftp_nlist()" para ver si entre los archivos está también "data.txt".

ftp_sise

Devuelve el tamaño de un archivo. La sintaxis es:

$size = ftp_size($stream, remote_filename);

Vovliendo a los ejemplos hechos anteriormente, vamos a conocer el tamaño del archivo "data.txt", que está en el directorio en el que estamos actualmente; será suficiente con escribir:

$size = ftp_size($stream, "data.txt");

de modo que la variable $size incluya el tamaño del archivo "data.txt".

ftp_mdtm

Devuelve la fecha del último cambio de un archivo, devolviéndola como Unix timestamp. La sintaxis es:

$date = ftp_mdtm($stream, remote_filename);

Por ejemplo, si queremos saber la fecha del último cambio del archivo "data.txt" podemos escribir:

$date = ftp_mdtm($stream, "data.txt");

También en este caso, la variable "$data" incluye la fecha del último cambio del archivo o el valor "-1" si fracasa (archivo inexistente o casos parecidos).

ftp_rename e ftp_delete

Como queda claro por los nombres, estas dos funciones sirven para volver a nombrar un archivo y para borrarlo. La primera tiene la sintaxis:

$name = ftp_rename($stream, oldname, newname);

en el que "oldname" es el nombre originario del archivo y "newname" es el nuevo nombre que queremos asignar al archivo.
Por ejemplo, para volver a nombrar el archivo "data.txt" en "dati.dat" podemos escribir:

$name = ftp_rename($stream, "data.txt", "datos.dat");

La variable $name incluirá "1" si la operación ha tenido éxisto, "0" si no lo ha tenido (archivo inexistente o casos parecidos).

La función "ftp_delete(),en cambio, se utiliza con sintaxis:

£delete = ftp_delete($stream, file);

Por ejemplo, para eliminar el archivo "datos.dat" que están en "current-directory" podemos escribir:

$delete = ftp_delete ($stream, "datos.dat");

También en este caso la variable puede incluir el valor "1" (el archivo ha sido eliminado) o "0" (algo no ha funcionado).

ftp_quit

Llegados a este punto, nuestro trabajo en el servidor se ha acabado y podemos dejar de conectarnos utilizando la función "ftp_quit()" que tiene una sintaxis muy simple:

$quit = ftp_quit($stream).

Siempre es aconsejable invocar esta función en lugar de cerrar el programa en ejecución, sobre todo para respetar al servidor.

  Volver al inicio de la página