W3docs

ftp_ssl_connect()

La función ftp_ssl_connect() de PHP establece una conexión segura cifrada con SSL a un servidor FTP. Aprende su sintaxis, parámetros y ejemplos prácticos.

Comprendiendo la función PHP ftp_ssl_connect()

La función ftp_ssl_connect() abre una conexión FTPS explícito (FTP sobre SSL/TLS) a un servidor FTP. Es la contraparte segura de ftp_connect(): ambas devuelven un handle de conexión que se pasa a las demás funciones ftp_*, pero ftp_ssl_connect() actualiza el canal de control a una sesión TLS cifrada para que tus credenciales de inicio de sesión y comandos no se envíen en texto plano.

Esta página explica qué hace la función, sus parámetros y valor de retorno, un ejemplo completo funcional, y los errores comunes (FTPS vs. SFTP, verificación de certificados y modo pasivo).

¿Qué es ftp_ssl_connect()?

La función ftp_ssl_connect() establece una conexión segura cifrada con SSL/TLS a un servidor FTP. Requiere que PHP esté compilado con la extensión ftp y la extensión openssl. Acepta tres parámetros:

  1. host: El nombre del servidor FTP al que conectarse.
  2. port: El número de puerto al que conectarse. Este parámetro es opcional y por defecto es el puerto 21.
  3. timeout: El tiempo de espera para el intento de conexión en segundos. Este parámetro es opcional y por defecto es 90 segundos.

Nota: Por defecto, PHP verifica los certificados SSL usando el paquete de CA del sistema. En entornos de producción, asegúrate de que tus certificados CA estén actualizados para evitar fallos de conexión.

La función devuelve un handle de conexión FTP en caso de éxito (un objeto FTP\Connection en PHP 8.1+, o un resource en versiones anteriores) y false en caso de error.

FTPS vs. SFTP — elige el correcto

Estos dos protocolos suelen confundirse porque ambos transfieren archivos de forma segura, pero son protocolos no relacionados:

  • FTPS (lo que usa esta función) es el protocolo FTP envuelto en TLS. Usa ftp_ssl_connect() y el resto de la familia ftp_*.
  • SFTP es un subsistema de SSH y no tiene nada que ver con FTP. PHP no puede acceder a él mediante las funciones ftp_* — debes usar la extensión ssh2_* o una biblioteca como phpseclib.

Si tu servidor solo ofrece SSH/SFTP, ftp_ssl_connect() no podrá conectarse a él.

Sintaxis de ftp_ssl_connect()

La sintaxis de la función ftp_ssl_connect() es la siguiente:

Sintaxis de ftp_ssl_connect()

resource ftp_ssl_connect ( string $host [, int $port = 21 [, int $timeout = 90 ]] )

La función ftp_ssl_connect() acepta tres parámetros, todos opcionales excepto el parámetro host. El parámetro port especifica el número de puerto al que conectarse, y el parámetro timeout especifica el tiempo de espera para el intento de conexión en segundos.

Uso de ftp_ssl_connect()

Para usar la función ftp_ssl_connect(), simplemente debes llamar a la función y pasar los parámetros requeridos. A continuación se muestra un ejemplo:

Uso de ftp_ssl_connect()

<?php

// Set up a secure SSL-encrypted FTP connection
$conn = ftp_ssl_connect('ftp.example.com', 21, 60);

// Login with your FTP credentials
ftp_login($conn, 'username', 'password');

// Perform FTP operations

// Close the FTP connection
ftp_close($conn);

En este ejemplo, establecemos una conexión segura cifrada con SSL al servidor FTP usando la función ftp_ssl_connect(). Luego iniciamos sesión con nuestras credenciales FTP usando la función ftp_login(). Después de iniciar sesión, podemos realizar las operaciones FTP necesarias. Finalmente, cerramos la conexión FTP usando la función ftp_close().

Una subida completa y lista para producción

El ejemplo mínimo anterior omite las comprobaciones que realmente necesitas en código real. La versión a continuación verifica que la conexión y el inicio de sesión fueron exitosos, cambia al modo pasivo (requerido detrás de la mayoría de firewalls y NAT), y sube un archivo:

Subida FTPS completa

<?php

$host = 'ftp.example.com';
$user = 'username';
$pass = 'password';

// 1. Open the secure connection (false on failure)
$conn = ftp_ssl_connect($host, 21, 30);
if ($conn === false) {
    exit("Could not connect to {$host}\n");
}

// 2. Authenticate
if (!ftp_login($conn, $user, $pass)) {
    ftp_close($conn);
    exit("Login failed for {$user}\n");
}

// 3. Passive mode — almost always required for FTPS behind a firewall
ftp_pasv($conn, true);

// 4. Upload a local file in binary mode
if (ftp_put($conn, 'remote/report.csv', 'local/report.csv', FTP_BINARY)) {
    echo "Upload succeeded\n";
} else {
    echo "Upload failed\n";
}

// 5. Always close the connection
ftp_close($conn);

Los buenos hábitos aquí — verificar el valor de retorno de cada llamada y habilitar el modo pasivo con ftp_pasv() — son los que hacen que FTPS sea confiable en la práctica. Sin el modo pasivo, las transferencias de datos frecuentemente se bloquean detrás de firewalls porque el servidor intenta abrir una conexión de retorno que el cliente no puede aceptar.

Manejo de errores en ftp_ssl_connect()

Es importante manejar los errores correctamente al usar la función ftp_ssl_connect(). Si la función devuelve false, significa que la operación no fue exitosa. A continuación se muestra un ejemplo de cómo manejar los errores:

Manejo de errores en ftp_ssl_connect()

<?php

$conn = ftp_ssl_connect('ftp.example.com');

if ($conn === false) {
    echo "Failed to establish a secure SSL-encrypted connection to the FTP server.\n";
} else {
    // Perform FTP operations

    // Close the FTP connection
    ftp_close($conn);
}

Al manejar los errores adecuadamente y verificar el valor de retorno de la función, puedes garantizar el éxito de tus operaciones FTP usando la función ftp_ssl_connect().

Errores comunes

  • Un handle devuelto no significa que hayas iniciado sesión. ftp_ssl_connect() solo abre el canal cifrado; aún necesitas un ftp_login() exitoso antes de que funcione cualquier operación.
  • Olvidar el modo pasivo. La mayoría de las transferencias de datos se bloquean detrás de firewalls o NAT a menos que llames a ftp_pasv($conn, true) después del inicio de sesión.
  • Confundir FTPS con SFTP. Como se mencionó anteriormente, esta función no puede comunicarse con un servidor SSH/SFTP.
  • Verifica que la función exista. Solo está disponible cuando PHP está compilado con las extensiones ftp y openssl. Usa function_exists('ftp_ssl_connect') si no puedes garantizar la compilación.
  • FTPS implícito (puerto 990) no está soportado. ftp_ssl_connect() realiza únicamente FTPS explícito. Para FTPS implícito, usa un wrapper de stream o una biblioteca dedicada.

Funciones relacionadas

Conclusión

La función ftp_ssl_connect() es el punto de entrada seguro al kit de herramientas FTP de PHP, que abre una conexión FTPS explícita para que las credenciales y los comandos viajen por TLS en lugar de texto plano. Combínala con un ftp_login() verificado, habilita el modo pasivo, y verifica cada valor de retorno, y tendrás un flujo de trabajo de transferencia de archivos confiable y seguro. Cuando el servidor remoto use SSH/SFTP en lugar de FTPS, recurre a la extensión ssh2_*.

Práctica

Práctica
¿Cuál es la función de ftp_ssl_connect() en PHP?
¿Cuál es la función de ftp_ssl_connect() en PHP?
Was this page helpful?