Das Datum fest im Griff: Ein Leitfaden zur Vereinheitlichung von Zeitstempeln in Ihrem PHP-Archiv
Ein Zeitstempel sagt, wann eine Datei zuletzt geändert wurde – und genau darauf verlassen sich Sicherungen, Übertragungen und Suchläufe. Weichen die Zeitstempel nach einem Umzug voneinander ab, entstehen unnötige Vergleiche und Fehler. Dieser Leitfaden zeigt, wie Sie sie wieder vereinheitlichen.
In der Welt der Softwareentwicklung ist die Konsistenz von Datei- und Ordner-Attributen nicht eine Frage der Ordnung, sondern ein wichtiges Element für die Synchronisation und Archivierung von Projekten. Dieser Artikel beleuchtet ein Batch Skript, das entwickelt wurde, um in PHP-Projekten eine Homogenität der Zeitstempel sicherzustellen. Dabei geht es nicht um die praktische Anwendung dieses Tools, sondern um dessen Relevanz in verschiedenen Anwendungsfällen. Durch die Vereinheitlichung von Erstellungs- und Änderungsdaten innerhalb eines Dateisystems können Entwickler sicherstellen, dass ihre Arbeit reibungslos mit Versionierungssystemen und Deployment-Strategien zusammenarbeitet und historische Datenintegrität bewahrt bleibt.
Was macht das Skript?
Das bereitgestellte Skript ist ein Batch-File für Windows, das in Verbindung mit PowerShell-Befehlen ausgeführt wird. Seine Hauptfunktion ist es, den Zeitstempel (Erstellungs- und Änderungsdatum) für alle Dateien und Ordner in einem Verzeichnis rekursiv auf ein spezifisches Datum zu setzen. Es ignoriert dabei bestimmte Verzeichnisse (wie .idea, .settings, .svn, .project, .buildpath), die häufig von Entwicklungswerkzeugen genutzt und deren Zeitstempel nicht verändert werden sollten. Fehler und Ausnahmen werden in einer Log-Datei protokolliert.
Welche Anwendungsfälle gibt es?
Das Skript ist in mehreren Szenarien nützlich:
- Versionskontrolle: Einheitliche Zeitstempel können die Versionsgeschichte klären, insbesondere wenn alte Branches mit aktuellen Datumsangaben aktualisiert werden sollen.
- Backup und Archivierung: Durch das Setzen eines einheitlichen Zeitstempels auf alle Dateien und Ordner eines Projekts kann das Wiederherstellen aus einem Backup vereinfacht werden.
- Deployment: Bei der Synchronisation von Dateien auf verschiedene Umgebungen können identische Zeitstempel dazu beitragen, Konflikte zu vermeiden.
- Entwicklungsumgebung: In Teams, wo Entwickler auf gemeinsamen Codebasen arbeiten, gewährleistet ein uniformer Zeitstempel, dass keine irrelevanten Änderungen aufgrund von Datumsabweichungen gemeldet werden.
Das Skript
@echo off
SETLOCAL ENABLEEXTENSIONS
set "strDatum=2023-11-05"
set "strLogDatei=%~dp0changeDates_errorlog.txt"
:: Löschen des Logs, falls es bereits existiert
if exist "%strLogDatei%" del "%strLogDatei%"
:: Ändern des Datums für Dateien und Ordner rekursiv
for /r "%~dp0" %%F in (*) do (
echo %%~nxF | findstr /I /C:".idea" /C:".settings" /C:".svn" /C:".project" /C:".buildpath" >nul
if errorlevel 1 (
attrib "%%F" | find "H" >nul
if errorlevel 1 (
powershell -command "$file = '%%F'; try { (Get-Item $file).CreationTime = ([datetime]::ParseExact('%strDatum%', 'yyyy-MM-dd', $null)); (Get-Item $file).LastWriteTime = ([datetime]::ParseExact('%strDatum%', 'yyyy-MM-dd', $null)); } catch { Write-Host 'Kann nicht ändern: ' $file ' - ' $_.Exception.Message; }" >> "%strLogDatei%" 2>&1
)
)
)
:: Ändern des Datums für Ordner
for /d /r "%~dp0" %%D in (*) do (
echo %%~nxD | findstr /I /C:".idea" /C:".settings" /C:".svn" /C:".project" /C:".buildpath" >nul
if errorlevel 1 (
attrib "%%D" | find "H" >nul
if errorlevel 1 (
powershell -command "$folder = '%%D'; try { (Get-Item $folder).CreationTime = ([datetime]::ParseExact('%strDatum%', 'yyyy-MM-dd', $null)); (Get-Item $folder).LastWriteTime = ([datetime]::ParseExact('%strDatum%', 'yyyy-MM-dd', $null)); } catch { Write-Host 'Kann nicht ändern: ' $folder ' - ' $_.Exception.Message; }" >> "%strLogDatei%" 2>&1
)
)
)
echo Fertig mit der Datumänderung. Überprüfe das Log: %strLogDatei%
Häufig gestellte Fragen
Funktioniert das Skript auf allen Betriebssystemen?
Nein, das Skript ist speziell für Windows-Betriebssysteme geschrieben und nutzt PowerShell, was standardmäßig in Windows integriert ist.
Was passiert, wenn das Skript auf eine Datei stößt, die nicht geändert werden kann?
Fehler und Ausnahmen werden in einer Log-Datei festgehalten, damit der Benutzer diese Fälle prüfen und manuell behandeln kann.
Kann ich das Datum, das das Skript verwendet, anpassen?
Ja, das Datum kann durch Änderung der Variable strDatum im Skript auf jedes gewünschte Datum gesetzt werden.
Muss ich besondere Berechtigungen haben, um das Skript auszuführen?
Ja, um Dateiattribute zu ändern, benötigen Sie in der Regel administrative Rechte auf dem System, auf dem das Skript ausgeführt wird.
Zeitstempel auslesen und setzen
PHP liest den Änderungszeitpunkt mit filemtime und setzt ihn mit touch. Beides arbeitet mit einem Zeitstempel, also der Sekundenzahl seit 1970. Wer einen Ordner durchläuft, kann so alle Dateien auf einen einheitlichen Stand bringen.
Vorsicht bei Übertragungen: Viele FTP-Programme setzen den Zeitstempel auf den Zeitpunkt des Uploads. Danach erscheinen alle Dateien als frisch geändert, obwohl sich der Inhalt nicht unterscheidet. Ein Abgleich nach dem Hochladen stellt den ursprünglichen Zustand wieder her.
Häufige Fragen zu Zeitstempeln
Wie lese ich den Zeitstempel einer Datei? Mit filemtime; das Ergebnis ist die Sekundenzahl seit dem 1. Januar 1970.
Wie setze ich einen Zeitstempel? Mit touch und einem Zeitwert; ohne Angabe wird die aktuelle Zeit verwendet.
Warum ändern sich Zeitstempel beim Upload? Weil viele Programme die Uploadzeit eintragen statt der ursprünglichen Änderungszeit.
Wirkt sich das auf Suchmaschinen aus? Indirekt: Sicherungen und Abgleiche arbeiten unnötig viel, wenn alle Dateien als geändert gelten.
Jetzt Datum und Uhrzeit in PHP nachlesen – dort steht, wie aus einem Zeitstempel ein lesbares Datum wird. Grundlagen bieten Typen in PHP und eigene Funktionen.
