W3docs

ftp_systype()

Die PHP-Funktion ftp_systype() liefert den Systemtyp des entfernten FTP-Servers. Dieser Artikel erklärt Syntax, Rückgabewerte und Einsatzmöglichkeiten.

Die PHP-Funktion ftp_systype()

ftp_systype() fragt einen verbundenen FTP-Server, welches Betriebssystem er verwendet, und gibt die Antwort als string zurück. Diese Seite erklärt, was die Funktion zurückgibt, warum die Antwort wichtig ist, wie man sie sicher aufruft und wie sie sich in die übrigen PHP-FTP-Funktionen einfügt.

Warum der Systemtyp wichtig ist

FTP-Server weisen je nach Host-Betriebssystem zwei sehr unterschiedliche Verhaltensweisen auf:

  • UNIX — Pfade verwenden Schrägstriche (/var/www), Dateinamen sind Groß-/Kleinschreibung-sensitiv, und Verzeichnislistings folgen dem bekannten ls -l-Format.
  • Windows_NT — Pfade können Backslashes verwenden, Dateinamen sind nicht Groß-/Kleinschreibung-sensitiv, und Listing-Formate unterscheiden sich.

Wenn man den Systemtyp im Voraus kennt, kann man korrekte Remote-Pfade aufbauen, den richtigen Transfermodus wählen und Verzeichnislistings zuverlässig parsen. Der Wert stammt direkt aus der SYST-Antwort des Servers und spiegelt das wider, was der Server meldet — typischerweise UNIX Type: L8 oder Windows_NT.

Syntax

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

ftp_systype() nimmt ein einziges Argument entgegen:

  • $ftp — eine aktive FTP-Verbindung, die von ftp_connect() oder ftp_ssl_connect() zurückgegeben wurde.

Bei Erfolg gibt die Funktion den Systemtyp des Remote-Servers als string zurück (z. B. "UNIX"), oder false bei einem Fehler.

Versionshinweis: Ab PHP 8.1 akzeptieren und liefern die FTP-Funktionen ein FTP\Connection-Objekt. In PHP 8.0 und früher wurde stattdessen eine resource verwendet — bestehende Skripte funktionieren unverändert weiter; nur der Name des zugrunde liegenden Typs hat sich geändert.

Grundlegende Verwendung

Vor dem Aufruf von ftp_systype() müssen Sie sich verbinden und anmelden; anschließend sollten Sie die Verbindung schließen:

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

Auf einem typischen Linux-FTP-Server gibt dies etwa Folgendes aus:

The remote FTP server's system type is: UNIX

Beachten Sie, dass die rohe SYST-Antwort oft länger ist (UNIX Type: L8); PHP normalisiert sie auf das führende Wort, sodass man in der Regel nur UNIX oder Windows_NT erhält.

Verhalten an den Systemtyp anpassen

Der praktische Grund für den Aufruf von ftp_systype() ist die Verzweigung der eigenen Logik. Zum Beispiel kann man einen Pfadtrenner basierend auf dem Host auswählen:

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

Auf einem UNIX-Server ergibt dies public_html/index.html; auf einem Windows-Server ergibt es public_html\index.html.

Fehlerbehandlung

ftp_systype() gibt bei einem Fehler false zurück, und ftp_connect() selbst gibt false zurück, wenn der Host nicht erreichbar ist. Überprüfen Sie beides, bevor Sie sich auf das Ergebnis verlassen:

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

Testen Sie den Rückgabewert stets mit dem strikten Vergleich === false. Eine lose Prüfung (!$type) könnte fehlschlagen, wenn ein Server jemals einen leeren, aber gültigen string zurückgeben sollte.

Häufige Fallstricke

  • Aufruf vor dem Anmelden. Manche Server verweigern SYST, bis die Authentifizierung abgeschlossen ist. Melden Sie sich zuerst an.
  • Blindes Vertrauen in den string. Der Wert ist das, was der Server meldet, und einige Server geben ungewöhnliche Strings zurück. Prüfen Sie auf einen Teilstring (str_contains($type, 'Windows')), anstatt auf exakte Übereinstimmung, wenn Sie Robustheit benötigen.
  • Verwechslung mit Dateiübertragung. ftp_systype() meldet nur das Betriebssystem — es überträgt keine Dateien. Verwenden Sie ftp_get() und ftp_put() für Downloads und Uploads.

Verwandte FTP-Funktionen

  • ftp_connect() — öffnet die Verbindung, die an ftp_systype() übergeben wird.
  • ftp_login() — Authentifizierung vor dem Ausführen von Befehlen.
  • ftp_pwd() — gibt das aktuelle Remote-Verzeichnis zurück.
  • ftp_close() — gibt die Verbindung frei, wenn man fertig ist.

Fazit

ftp_systype() ist eine kleine, aber nützliche Funktion: Ein einziger Aufruf verrät, ob man mit einem UNIX- oder Windows-FTP-Server kommuniziert, und ermöglicht es, korrekte Pfade zu erstellen und Listings zuverlässig zu parsen. Kombinieren Sie sie mit strikter Fehlerprüfung und den oben genannten verwandten FTP-Funktionen für robuste Dateiübertragungs-Skripte.

Übungen

Übung
Was macht die PHP-Funktion ftp_systype()?
Was macht die PHP-Funktion ftp_systype()?
Was this page helpful?