W3docs

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 formato ls -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|false

ftp_systype() acepta un único argumento:

  • $ftp — una conexión FTP activa devuelta por ftp_connect() o ftp_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 un resource — 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: UNIX

Ten 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 SYST hasta 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. Usa ftp_get() y ftp_put() para descargas y cargas.

Funciones FTP relacionadas

  • ftp_connect() — abre la conexión que se pasa a ftp_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.

Práctica

Práctica
¿Qué hace la función PHP ftp_systype()?
¿Qué hace la función PHP ftp_systype()?
Was this page helpful?