ftp_systype()
La función ftp_systype() de PHP recupera el tipo de sistema del servidor FTP remoto. En este artículo explicamos su uso y funcionamiento.
La función ftp_systype() de PHP
ftp_systype() consulta a un servidor FTP conectado qué tipo de sistema operativo ejecuta y devuelve esa respuesta como un string. Esta página explica qué devuelve la función, por qué importa la respuesta, cómo llamarla de forma segura y cómo encaja con el resto de funciones FTP de PHP.
Por qué importa el tipo de sistema
Los servidores FTP exponen dos familias de comportamiento muy distintas según el sistema operativo del host:
UNIX— las rutas usan barras inclinadas (/var/www), los nombres de archivo distinguen mayúsculas de minúsculas y los listados de directorio siguen el conocido formatols -l.Windows_NT— las rutas pueden usar barras invertidas, los nombres de archivo no distinguen mayúsculas de minúsculas y los formatos de listado son diferentes.
Conocer el tipo de sistema de antemano permite construir rutas remotas correctas, elegir el modo de transferencia adecuado y analizar listados de directorio sin tener que adivinar. El valor proviene directamente de la respuesta SYST del servidor, por lo que refleja lo que el servidor informa — típicamente UNIX Type: L8 o Windows_NT.
Sintaxis
ftp_systype(FTP\Connection $ftp): string|falseftp_systype() acepta un único argumento:
$ftp— una conexión FTP activa devuelta porftp_connect()oftp_ssl_connect().
Devuelve el tipo de sistema remoto como un string en caso de éxito (por ejemplo "UNIX"), o false en caso de error.
Nota de versión: a partir de PHP 8.1 las funciones FTP aceptan y devuelven un objeto
FTP\Connection. En PHP 8.0 y versiones anteriores, el mismo código usaba unresource— los scripts existentes siguen funcionando sin cambios; solo cambió el nombre del tipo subyacente.
Uso básico
Debes conectarte e iniciar sesión antes de llamar a ftp_systype(), y luego cerrar la conexión cuando hayas terminado:
<?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);Con un servidor FTP de Linux típico, esto imprime algo como:
The remote FTP server's system type is: UNIXTen en cuenta que la respuesta SYST sin procesar suele ser más larga (UNIX Type: L8); PHP la normaliza a la primera palabra, por lo que normalmente recibirás solo UNIX o Windows_NT.
Adaptar el comportamiento al tipo de sistema
La razón práctica para llamar a ftp_systype() es ramificar la lógica. Por ejemplo, puedes elegir un separador de ruta en función del host:
<?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);En un servidor UNIX esto construye public_html/index.html; en un servidor Windows construye public_html\index.html.
Manejo de errores
ftp_systype() devuelve false en caso de error, y ftp_connect() también devuelve false si no puede alcanzar el host. Comprueba ambos antes de confiar en el resultado:
<?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);
}Comprueba siempre el valor devuelto con la comparación estricta === false. Una comprobación laxa (!$type) podría fallar si algún servidor devolviera alguna vez un string vacío pero válido.
Errores comunes
- Llamarla antes de iniciar sesión. Algunos servidores rechazan
SYSThasta que se completa la autenticación. Primero inicia sesión. - Confiar ciegamente en el string. El valor es lo que el servidor anuncia, y algunos servidores informan strings inusuales. Compara con una subcadena (
str_contains($type, 'Windows')) en lugar de una coincidencia exacta cuando necesites robustez. - Confundirla con la transferencia de archivos.
ftp_systype()solo informa del sistema operativo — no mueve archivos. Usaftp_get()yftp_put()para descargas y cargas.
Funciones FTP relacionadas
ftp_connect()— abre la conexión que se pasa aftp_systype().ftp_login()— autentícate antes de emitir comandos.ftp_pwd()— obtén el directorio remoto actual.ftp_close()— libera la conexión cuando hayas terminado.
Conclusión
ftp_systype() es una función pequeña pero útil: una sola llamada te indica si estás hablando con un servidor FTP UNIX o Windows, lo que te permite construir rutas correctas y analizar listados de forma fiable. Combínala con una gestión estricta de errores y las funciones FTP relacionadas anteriores para crear scripts de transferencia de archivos robustos.