ftp_systype()
La fonction ftp_systype() est une fonction PHP intégrée qui récupère le type de système du serveur FTP distant. Découvrez son fonctionnement.
La fonction PHP ftp_systype()
ftp_systype() interroge un serveur FTP connecté sur le type de système d'exploitation qu'il exécute et renvoie cette réponse sous forme de string. Cette page explique ce que la fonction retourne, pourquoi la réponse est importante, comment l'appeler en toute sécurité, et comment elle s'intègre aux autres fonctions FTP de PHP.
Pourquoi le type de système est important
Les serveurs FTP exposent deux familles de comportements très différentes selon le système d'exploitation hôte :
UNIX— les chemins utilisent des barres obliques (/var/www), les noms de fichiers sont sensibles à la casse, et les listes de répertoires suivent la disposition familièrels -l.Windows_NT— les chemins peuvent utiliser des barres obliques inverses, les noms de fichiers sont insensibles à la casse, et les formats de listing diffèrent.
Connaître le type de système à l'avance vous permet de construire des chemins distants corrects, de choisir le bon mode de transfert, et d'analyser les listes de répertoires sans avoir à deviner. La valeur provient directement de la réponse SYST du serveur, elle reflète donc ce que le serveur signale — généralement UNIX Type: L8 ou Windows_NT.
Syntaxe
ftp_systype(FTP\Connection $ftp): string|falseftp_systype() prend un seul argument :
$ftp— une connexion FTP active retournée parftp_connect()ouftp_ssl_connect().
Elle retourne le type de système distant sous forme de string en cas de succès (par exemple "UNIX"), ou false en cas d'échec.
Note de version : à partir de PHP 8.1, les fonctions FTP acceptent et retournent un objet
FTP\Connection. Dans PHP 8.0 et antérieur, le même code utilisait unresourceà la place — vos scripts existants continuent de fonctionner sans modification, seul le nom du type sous-jacent a changé.
Utilisation de base
Vous devez vous connecter et vous authentifier avant d'appeler ftp_systype(), puis fermer la connexion une fois que vous avez terminé :
<?php
// Connect to the remote FTP server
$conn = ftp_connect('ftp.example.com');
// Login with your FTP credentials
ftp_login($conn, 'username', 'password');
// Get the remote FTP server's system type
$system_type = ftp_systype($conn);
if ($system_type === false) {
echo "Failed to retrieve the remote FTP server's system type.\n";
} else {
echo "The remote FTP server's system type is: $system_type\n";
}
// Close the FTP connection
ftp_close($conn);Sur un serveur FTP Linux classique, cela affiche quelque chose comme :
The remote FTP server's system type is: UNIXNotez que la réponse brute SYST est souvent plus longue (UNIX Type: L8) ; PHP la normalise au premier mot, vous recevez donc généralement juste UNIX ou Windows_NT.
Adapter le comportement au type de système
La raison pratique d'appeler ftp_systype() est de brancher votre logique. Par exemple, vous pouvez choisir un séparateur de chemin en fonction de l'hôte :
<?php
$conn = ftp_connect('ftp.example.com');
ftp_login($conn, 'username', 'password');
$type = ftp_systype($conn);
$separator = ($type === 'Windows_NT') ? '\\' : '/';
$remotePath = 'public_html' . $separator . 'index.html';
echo "Using path: $remotePath\n";
ftp_close($conn);Sur un serveur UNIX, cela construit public_html/index.html ; sur un serveur Windows, cela construit public_html\index.html.
Gestion des erreurs
ftp_systype() retourne false en cas d'échec, et ftp_connect() retourne lui-même false s'il ne peut pas atteindre l'hôte. Vérifiez les deux avant de vous fier au résultat :
<?php
$conn = ftp_connect('ftp.example.com');
if ($conn === false) {
echo "Failed to connect to the remote FTP server.\n";
} else {
$system_type = ftp_systype($conn);
if ($system_type === false) {
echo "Failed to retrieve the remote FTP server's system type.\n";
} else {
echo "The remote FTP server's system type is: $system_type\n";
}
// Close the FTP connection
ftp_close($conn);
}Testez toujours la valeur de retour avec la comparaison stricte === false. Une vérification lâche (!$type) pourrait se déclencher à tort si un serveur retournait un jour une string vide mais valide.
Pièges courants
- L'appeler avant de se connecter. Certains serveurs refusent
SYSTtant que l'authentification n'est pas terminée. Authentifiez-vous d'abord. - Faire confiance à la string aveuglément. La valeur est ce que le serveur annonce, et quelques serveurs signalent des strings inhabituelles. Comparez sur une sous-chaîne (
str_contains($type, 'Windows')) plutôt qu'une correspondance exacte pour être robuste. - La confondre avec le transfert de fichiers.
ftp_systype()ne fait que signaler le système d'exploitation — elle ne déplace pas de fichiers. Utilisezftp_get()etftp_put()pour les téléchargements et les envois.
Fonctions FTP associées
ftp_connect()— ouvre la connexion que vous passez àftp_systype().ftp_login()— authentifiez-vous avant d'émettre des commandes.ftp_pwd()— obtient le répertoire distant actuel.ftp_close()— libère la connexion une fois terminé.
Conclusion
ftp_systype() est une fonction petite mais utile : un seul appel vous indique si vous communiquez avec un serveur FTP UNIX ou Windows, ce qui vous permet de construire des chemins corrects et d'analyser les listings de façon fiable. Associez-la à une vérification stricte des erreurs et aux fonctions FTP associées ci-dessus pour des scripts de transfert de fichiers robustes.