Start · Sprachen · PHP · Referenz · ftp_size

ftp_size

Funktion

Gibt die Dateigröße einer Datei auf dem FTP-Server in Bytes zurück, oder <code>-1</code> bei Fehler.

seit PHP 4.0.0 Kategorie: io

Signatur

ftp_size(FTP\Connection $ftp, string $filename): int

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

Typ
int
Beschreibung
Gibt die Dateigröße in Bytes als ganzzahligen Wert zurück. Wenn die Datei nicht existiert, der Server den 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);
Dateigröße: 12.47 MB

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);
Starte Download (45231 Bytes) ... Download erfolgreich.

// 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.