W3docs

ftp_systype()

La funzione ftp_systype() è una funzione PHP integrata che recupera il tipo di sistema del server FTP remoto. In questo articolo la esaminiamo.

La funzione PHP ftp_systype()

ftp_systype() interroga un server FTP connesso per conoscere il tipo di sistema operativo in esecuzione e restituisce quella risposta come string. Questa pagina spiega cosa restituisce la funzione, perché la risposta è importante, come chiamarla in modo sicuro e come si integra con le altre funzioni FTP di PHP.

Perché il tipo di sistema è importante

I server FTP espongono due famiglie di comportamenti molto diverse a seconda del sistema operativo host:

  • UNIX — i percorsi usano la barra obliqua (/var/www), i nomi dei file sono sensibili alle maiuscole e le directory listing seguono il classico layout ls -l.
  • Windows_NT — i percorsi possono usare la barra rovescia, i nomi dei file non sono sensibili alle maiuscole e i formati delle listing differiscono.

Conoscere il tipo di sistema in anticipo permette di costruire percorsi remoti corretti, scegliere la modalità di trasferimento giusta e analizzare le directory listing senza dover indovinare. Il valore proviene direttamente dalla risposta SYST del server, quindi riflette quanto il server riporta — tipicamente UNIX Type: L8 o Windows_NT.

Sintassi

ftp_systype(FTP\Connection $ftp): string|false

ftp_systype() accetta un singolo argomento:

  • $ftp — una connessione FTP attiva restituita da ftp_connect() o ftp_ssl_connect().

Restituisce il tipo di sistema remoto come string in caso di successo (ad esempio "UNIX"), oppure false in caso di errore.

Nota sulla versione: a partire da PHP 8.1 le funzioni FTP accettano e restituiscono un oggetto FTP\Connection. In PHP 8.0 e precedenti lo stesso codice usava una resource — gli script esistenti continuano a funzionare senza modifiche, è cambiato solo il nome del tipo sottostante.

Utilizzo di base

È necessario connettersi ed effettuare il login prima di chiamare ftp_systype(), poi chiudere la connessione al termine:

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

Su un tipico server FTP Linux questo produce un output simile a:

The remote FTP server's system type is: UNIX

Si noti che la risposta SYST grezza è spesso più lunga (UNIX Type: L8); PHP la normalizza alla prima parola, quindi di solito si riceve solo UNIX o Windows_NT.

Adattare il comportamento al tipo di sistema

Il motivo pratico per chiamare ftp_systype() è ramificare la logica. Ad esempio, si potrebbe scegliere un separatore di percorso in base all'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);

Su un server UNIX questo produce public_html/index.html; su un server Windows produce public_html\index.html.

Gestione degli errori

ftp_systype() restituisce false in caso di errore, e ftp_connect() stesso restituisce false se non riesce a raggiungere l'host. Verificare entrambi prima di fare affidamento sul risultato:

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

Testare sempre il valore restituito con il confronto stretto === false. Un controllo lasso (!$type) potrebbe dare falsi positivi se un server restituisse mai una string vuota ma valida.

Insidie comuni

  • Chiamarla prima del login. Alcuni server rifiutano SYST fino al completamento dell'autenticazione. Effettuare il login prima.
  • Fidarsi ciecamente della string. Il valore è ciò che il server pubblicizza e alcuni server riportano string insolite. Verificare su una sottostringa (str_contains($type, 'Windows')) anziché una corrispondenza esatta quando si vuole essere robusti.
  • Confonderla con il trasferimento di file. ftp_systype() riporta solo il sistema operativo — non sposta file. Usare ftp_get() e ftp_put() per download e upload.

Funzioni FTP correlate

  • ftp_connect() — apre la connessione da passare a ftp_systype().
  • ftp_login() — autentica prima di eseguire i comandi.
  • ftp_pwd() — ottiene la directory remota corrente.
  • ftp_close() — rilascia la connessione al termine.

Conclusione

ftp_systype() è una funzione piccola ma utile: una singola chiamata indica se si sta comunicando con un server FTP UNIX o Windows, permettendo di costruire percorsi corretti e analizzare le listing in modo affidabile. Abbinarla a un controllo rigoroso degli errori e alle funzioni FTP correlate sopra indicate per script di trasferimento file robusti.

Esercizio

Pratica
Cosa fa la funzione PHP ftp_systype()?
Cosa fa la funzione PHP ftp_systype()?
Was this page helpful?