Signatur
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
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);
?>
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);
?>
// 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.