Start · Sprachen · PHP · Referenz · ftp_mdtm

ftp_mdtm

Funktion

Liefert den Unix-Timestamp der letzten Änderung einer Datei auf einem FTP-Server.

seit PHP 4.0.0 Kategorie: io

Signatur

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

Beschreibung

ftp_mdtm() fragt den FTP-Server nach dem Zeitpunkt der letzten Änderung (Modification Time) einer bestimmten Datei ab und gibt diesen als Unix-Timestamp zurück. Der Timestamp kann anschließend mit Standardfunktionen wie date() oder strftime() formatiert werden.

Die Funktion ist nützlich, wenn entschieden werden soll, ob eine lokale Kopie einer Datei aktuell ist oder ob die Datei auf dem Server seit dem letzten Download verändert wurde – z. B. in Synchronisations- oder Backup-Skripten.

Wichtig: Nicht alle FTP-Server unterstützen den MDTM-Befehl. Außerdem funktioniert ftp_mdtm() je nach Implementierung nur für Dateien, nicht für Verzeichnisse. Im Fehlerfall oder bei fehlender Unterstützung wird -1 zurückgegeben.

Der zurückgegebene Timestamp basiert in der Regel auf UTC. Bei der Ausgabe sollte die Zeitzone beachtet werden, sofern eine lokale Darstellung gewünscht ist.

Parameter

Name Typ Default Beschreibung
$ftp Pflicht FTP\Connection Eine aktive FTP-Verbindung, wie sie von ftp_connect() zurückgegeben wird. Ab PHP 8.1 ist dies ein FTP\Connection-Objekt (zuvor eine Ressource).
$filename Pflicht string Der Pfad zur Datei auf dem FTP-Server, deren Änderungszeitpunkt abgefragt werden soll. In der Regel ein absoluter oder relativer Pfad auf dem Server, z. B. /pub/data/report.csv.

Rückgabewert

Typ
int
Beschreibung
Gibt den Unix-Timestamp der letzten Dateiänderung zurück. Bei einem Fehler oder wenn der Server den MDTM-Befehl nicht unterstützt, wird -1 zurückgegeben.

Beispiele

Änderungszeitpunkt einer FTP-Datei abfragen

<?php
$ftp = ftp_connect('ftp.example.com');
if (!$ftp) {
    die('Verbindung fehlgeschlagen.');
}

if (!ftp_login($ftp, 'benutzer', 'passwort')) {
    die('Login fehlgeschlagen.');
}

$datei = '/pub/daten/bericht.csv';
$timestamp = ftp_mdtm($ftp, $datei);

if ($timestamp !== -1) {
    echo 'Letzte Änderung: ' . date('d.m.Y H:i:s', $timestamp) . PHP_EOL;
} else {
    echo 'Änderungszeitpunkt konnte nicht ermittelt werden.' . PHP_EOL;
}

ftp_close($ftp);
?>
Letzte Änderung: 15.03.2024 10:42:17

Synchronisationsprüfung: Lokale Datei vs. FTP-Datei

<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzer', 'passwort');

$remoteDatei = '/pub/daten/export.csv';
$lokaleDatei = '/var/www/cache/export.csv';

$remoteTimestamp = ftp_mdtm($ftp, $remoteDatei);
$lokaleTimestamp = file_exists($lokaleDatei) ? filemtime($lokaleDatei) : 0;

if ($remoteTimestamp === -1) {
    echo 'Änderungszeitpunkt des Servers nicht verfügbar.' . PHP_EOL;
} elseif ($remoteTimestamp > $lokaleTimestamp) {
    echo 'Datei auf dem Server ist neuer – Download wird gestartet.' . PHP_EOL;
    ftp_get($ftp, $lokaleDatei, $remoteDatei, FTP_BINARY);
} else {
    echo 'Lokale Datei ist aktuell – kein Download nötig.' . PHP_EOL;
}

ftp_close($ftp);
?>
Datei auf dem Server ist neuer – Download wird gestartet.

// Wichtig · Fallstricke

Serverkompatibilität: Nicht alle FTP-Server implementieren den MDTM-Befehl (RFC 3659). Besonders ältere oder restriktive Server geben -1 zurück. Prüfe daher den Rückgabewert immer auf -1.

Verzeichnisse: ftp_mdtm() funktioniert ausschließlich für Dateien. Bei Übergabe eines Verzeichnispfades wird ebenfalls -1 zurückgegeben.

Zeitzonen: Der zurückgegebene Timestamp ist in UTC. Wenn eine lokale Darstellung benötigt wird, sollte die PHP-Zeitzone mit date_default_timezone_set() korrekt gesetzt sein, bevor date() aufgerufen wird.

PHP 8.1: Ab PHP 8.1 erwartet die Funktion ein FTP\Connection-Objekt anstelle einer veralteten Ressource (resource). Code, der mit alten PHP-Versionen kompatibel sein soll, sollte dies berücksichtigen.