Conexiones FTP activas y pasivas con PHP
El lenguaje PHP ofrece un completo set de funciones para utilizar el protocolo FTP usado para la transferencia de archivos. Este set de funciones permite hacer casi cualquier cosa que un cliente de FTP harÃa cosa que resulta extremadamente útil cuando necesitamos que un script realize alguna de estas funciones.
El uso de estas funciones es muy sencillo y no requiere de conocimientos especÃficos del protocolo salvo algunas cosas básicas que trataré de explicarlas a continuación.
El primer instancia podemos dividir las conexiones FTP en dos tipos: conexiones activas y conexiones pasivas.
En las conexiones activas se utilizan dos puertos de comunicación especÃficos en el server: el famoso puerto 21 para la comunicación y el acknowledge y el puerto 20 para la transferencia de datos. En este caso es el server que intenta la segunda conexión a un puerto random alto del cliente
En las conexiones pasivas, por su parte, el server no especifica un puerto de transferencia de datos, sino que es el cliente que intenta también esta conexión para la transferencia de datos.

Pero volviendo a PHP, ¿para qué sirve esto?
Es una buena pregunta. Es muy común, al utilizar alguno de los ejemplos que se muestran a modo didáctico en los sitios de PHP que por defecto intentan conexiones activas, que tire un aviso tipo warning y que el archivo sea creado en el servidor pero que esté vacÃo, con 0Kb. Esto sucede porque el servidor intenta iniciar la segunda comunicación para la transferencia de datos con el cliente y el firewall de este último le rechace la comunicación. Por lo que trae como resultado la creación del archivo sin transferencia alguna.
Para solucionar esto hay dos soluciones: La primera es seguir usando la conexión activa y permitir la conexión a través del puerto 20 en el cliente y la segunda es usar conexiones FTP pasivas. Cada usa tiene su pro y su contra y estará en ustedes usar una o usar otra.
Para usar conexiones pasivas con PHP basta sólo con setear la pasividad con la función ftp_pasv($id_conexion,true).










5 Comentarios
MatÃas
julio 3rd, 2006 at 3:35 am
PHP definitivamente es muy simple. El último trabajo que presenté para “Redes” era sobre firewalling y el tema del FTP es un embole. Actualmente existen firewalls que tienen que leer todos los paquetes y “entender” FTP para poder saber de dónde va a venir la conexión.
Larga vida a PHP.
Miguel
julio 4th, 2006 at 11:14 pm
Ladrón… deja de robar información del trabajo!!!…
Lucas
julio 4th, 2006 at 11:19 pm
Vamos Miguel… si nadie tenÃa idea de esto :P Puedo haberla robado de cualquier otro lado… menos de ahà ;)
Miguel
julio 4th, 2006 at 11:34 pm
mmmm… tenes razon…entonces gracias por enseñarlo…:)
Gabriel
abril 16th, 2011 at 11:03 am
Buen aporte compañero.. me ha servido de arto esta informacion.
mil gracias