W3docs

ftp_ssl_connect()

La fonction ftp_ssl_connect() en PHP ouvre une connexion FTPS explicite chiffrée SSL/TLS vers un serveur FTP.

Comprendre la fonction PHP ftp_ssl_connect()

La fonction ftp_ssl_connect() ouvre une connexion FTPS explicite (FTP sur SSL/TLS) vers un serveur FTP. C'est l'équivalent sécurisé de ftp_connect() : toutes deux retournent un handle de connexion que vous transmettez aux autres fonctions ftp_*, mais ftp_ssl_connect() chiffre le canal de contrôle via une session TLS, de sorte que vos identifiants et commandes ne sont pas envoyés en clair.

Cette page décrit ce que fait la fonction, ses paramètres et sa valeur de retour, un exemple complet et fonctionnel, ainsi que les pièges courants (FTPS vs. SFTP, vérification des certificats et mode passif).

Qu'est-ce que ftp_ssl_connect() ?

La fonction ftp_ssl_connect() établit une connexion chiffrée SSL/TLS vers un serveur FTP. Elle nécessite que PHP soit compilé avec l'extension ftp et l'extension openssl. Elle accepte trois paramètres :

  1. host : Le nom du serveur FTP auquel se connecter.
  2. port : Le numéro de port de connexion. Ce paramètre est optionnel et vaut par défaut 21.
  3. timeout : Le délai d'expiration de la tentative de connexion en secondes. Ce paramètre est optionnel et vaut par défaut 90 secondes.

Remarque : Par défaut, PHP vérifie les certificats SSL à l'aide du bundle CA du système. Pour les environnements de production, assurez-vous que vos certificats CA sont à jour afin d'éviter des échecs de connexion.

La fonction retourne un handle de connexion FTP en cas de succès (un objet FTP\Connection en PHP 8.1+, ou une ressource dans les versions antérieures) et false en cas d'échec.

FTPS vs. SFTP — choisir le bon protocole

Ces deux protocoles sont souvent confondus car tous deux transfèrent des fichiers de manière sécurisée, mais ils n'ont aucun rapport :

  • FTPS (ce que cette fonction utilise) est le protocole FTP encapsulé dans TLS. Utilisez ftp_ssl_connect() et le reste de la famille ftp_*.
  • SFTP est un sous-système de SSH et n'a rien à voir avec FTP. PHP ne peut pas l'utiliser via les fonctions ftp_* — il faut l'extension ssh2_* ou une bibliothèque comme phpseclib à la place.

Si votre serveur ne propose que SSH/SFTP, ftp_ssl_connect() ne pourra pas s'y connecter.

Syntaxe de ftp_ssl_connect()

La syntaxe de la fonction ftp_ssl_connect() est la suivante :

Syntaxe de ftp_ssl_connect()

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

La fonction ftp_ssl_connect() prend trois paramètres, dont seul host est obligatoire. Le paramètre port spécifie le numéro de port de connexion, et le paramètre timeout spécifie le délai d'expiration de la tentative de connexion en secondes.

Utilisation de ftp_ssl_connect()

Pour utiliser la fonction ftp_ssl_connect(), il suffit de l'appeler en lui passant les paramètres requis. Voici un exemple :

Utilisation 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);

Dans cet exemple, nous établissons une connexion chiffrée SSL/TLS vers le serveur FTP à l'aide de la fonction ftp_ssl_connect(). Nous nous connectons ensuite avec nos identifiants FTP via la fonction ftp_login(). Après la connexion, nous pouvons effectuer toutes les opérations FTP nécessaires. Enfin, nous fermons la connexion FTP avec la fonction ftp_close().

Un téléversement complet prêt pour la production

L'exemple minimal ci-dessus omet les vérifications dont vous avez réellement besoin dans du code réel. La version ci-dessous vérifie que la connexion et l'authentification ont réussi, passe en mode passif (requis derrière la plupart des pare-feux et du NAT), et téléverse un fichier :

Téléversement FTPS complet

<?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);

Les bonnes pratiques ici — vérifier la valeur de retour de chaque appel et activer le mode passif avec ftp_pasv() — sont ce qui rend FTPS fiable en pratique. Sans le mode passif, les transferts de données se bloquent souvent derrière des pare-feux, car le serveur tente d'ouvrir une connexion de retour que le client ne peut pas accepter.

Gestion des erreurs dans ftp_ssl_connect()

Il est important de gérer correctement les erreurs lors de l'utilisation de la fonction ftp_ssl_connect(). Si la fonction retourne false, cela signifie que l'opération a échoué. Voici un exemple de gestion des erreurs :

Gestion des erreurs dans 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);
}

En gérant correctement les erreurs et en vérifiant la valeur de retour de la fonction, vous pouvez garantir le succès de vos opérations FTP avec la fonction ftp_ssl_connect().

Pièges courants

  • Un handle retourné ne signifie pas que vous êtes connecté. ftp_ssl_connect() ouvre uniquement le canal chiffré ; vous avez encore besoin d'un ftp_login() réussi avant que toute opération fonctionne.
  • Oublier le mode passif. La plupart des transferts de données se bloquent derrière des pare-feux ou du NAT si vous n'appelez pas ftp_pasv($conn, true) après la connexion.
  • Confondre FTPS et SFTP. Comme indiqué ci-dessus, cette fonction ne peut pas communiquer avec un serveur SSH/SFTP.
  • Vérifier que la fonction existe. Elle n'est disponible que lorsque PHP est compilé avec les extensions ftp et openssl. Protégez votre code avec function_exists('ftp_ssl_connect') si vous ne pouvez pas garantir la compilation.
  • Le FTPS implicite (port 990) n'est pas pris en charge. ftp_ssl_connect() effectue uniquement du FTPS explicite. Pour le FTPS implicite, utilisez un wrapper de flux ou une bibliothèque dédiée.

Fonctions associées

Conclusion

La fonction ftp_ssl_connect() est le point d'entrée sécurisé de la boîte à outils FTP de PHP, ouvrant une connexion FTPS explicite afin que les identifiants et les commandes transitent par TLS plutôt qu'en clair. Associez-la à un ftp_login() vérifié, activez le mode passif et vérifiez chaque valeur de retour, et vous obtiendrez un workflow de transfert de fichiers fiable et sécurisé. Lorsque le serveur distant utilise SSH/SFTP plutôt que FTPS, faites appel à l'extension ssh2_* à la place.

Pratique

Pratique
Quelle est la fonction de ftp_ssl_connect() en PHP ?
Quelle est la fonction de ftp_ssl_connect() en PHP ?
Was this page helpful?