Signatur
Beschreibung
ftp_size() ermittelt die Größe einer Datei auf einem entfernten FTP-Server in Bytes. Die Funktion ist nützlich, um vor einem Download zu prüfen, wie groß eine Datei ist, oder um Fortschrittsanzeigen zu berechnen.
Wichtig: Nicht alle FTP-Server unterstützen den SIZE-Befehl. Wenn der Server diesen Befehl nicht kennt oder die Datei nicht existiert, gibt die Funktion -1 zurück. Ein Rückgabewert von -1 kann also sowohl einen Fehler als auch fehlende Server-Unterstützung bedeuten.
Für Verzeichnisse liefert ftp_size() ebenfalls -1, da die Funktion ausschließlich für reguläre Dateien vorgesehen ist. Um Verzeichnisse zu erkennen, sollte stattdessen ftp_nlist() oder ftp_rawlist() verwendet werden.
Ab PHP 8.1 ist der erste Parameter ein FTP\Connection-Objekt statt einer Ressource.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine aktive FTP-Verbindung, die von ftp_connect() oder ftp_ssl_connect() zurückgegeben wurde. |
|
| $filename Pflicht | string | Der Pfad zur Datei auf dem FTP-Server, deren Größe ermittelt werden soll. Relative und absolute Pfade sind möglich. |
Rückgabewert
SIZE-Befehl nicht unterstützt oder ein anderer Fehler auftritt, wird -1 zurückgegeben.Beispiele
Dateigröße einer FTP-Datei ermitteln
<?php
$ftp = ftp_connect('ftp.example.com');
if ($ftp === false) {
die('Verbindung fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzer', 'passwort')) {
die('Anmeldung fehlgeschlagen.');
}
$datei = '/public_html/download/archiv.zip';
$groesse = ftp_size($ftp, $datei);
if ($groesse === -1) {
echo "Dateigröße konnte nicht ermittelt werden.\n";
} else {
echo "Dateigröße: " . number_format($groesse / 1024 / 1024, 2) . " MB\n";
}
ftp_close($ftp);
Größenprüfung vor dem Download mit Fortschrittsinfo
<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzer', 'passwort');
$remoteDatei = '/files/daten.csv';
$lokaleDatei = '/tmp/daten.csv';
$groesse = ftp_size($ftp, $remoteDatei);
if ($groesse === -1) {
echo "Datei nicht vorhanden oder Größe nicht abrufbar.\n";
ftp_close($ftp);
exit;
}
if ($groesse > 100 * 1024 * 1024) {
echo "Warnung: Datei ist größer als 100 MB ({$groesse} Bytes).\n";
} else {
echo "Starte Download ({$groesse} Bytes) ...\n";
if (ftp_get($ftp, $lokaleDatei, $remoteDatei, FTP_BINARY)) {
echo "Download erfolgreich.\n";
} else {
echo "Download fehlgeschlagen.\n";
}
}
ftp_close($ftp);
// Wichtig · Fallstricke
Verzeichnisse: Für Verzeichnisse gibt ftp_size() immer -1 zurück — es handelt sich um eine rein dateibasierte Funktion.
Server-Kompatibilität: Nicht alle FTP-Server implementieren den SIZE-Befehl des FTP-Protokolls. In solchen Fällen ist der Rückgabewert zuverlässig -1, ohne dass ein PHP-Fehler ausgelöst wird. Prüfe daher stets auf -1.
Große Dateien: Auf 32-Bit-Systemen können Dateien über 2 GB zu Problemen mit dem Integer-Überlauf führen. Für solche Fälle sollte ein 64-Bit-System verwendet oder die Größe per ftp_rawlist() manuell geparst werden.
Passive vs. aktiver Modus: ftp_size() benötigt keine Datenverbindung, da es sich um einen Steuerkanal-Befehl handelt. Der aktive/passive Modus hat keinen Einfluss auf diese Funktion.