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 bekanntenls -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|falseftp_systype() nimmt ein einziges Argument entgegen:
$ftp— eine aktive FTP-Verbindung, die vonftp_connect()oderftp_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 eineresourceverwendet — 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: UNIXBeachten 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 Sieftp_get()undftp_put()für Downloads und Uploads.
Verwandte FTP-Funktionen
ftp_connect()— öffnet die Verbindung, die anftp_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.