Dateien nach Datu und Uhrzeit sortiert ausgeben

forum-user

Mitglied
Hallo Leute, ich steh grad neben mir. Ich lasse per Formular eine TEXT Datei erstellen die wie folgt lautet bemerkung-DD-MM-JJJJ_HH-MM-SS.txt. Quasi nach jedem bestätigten Formular gibts eine neue Datei. Diese Dateien möchte ich mir auflisten lassen nach Datum und wenn möglich die jüngste an oberster Stelle.

Wie kann ich dies realisieren?
Hier mal mein bereits vorhandener Code

PHP:
<?php
// Öffnet ein Unterverzeichnis
   $verzeichnis = openDir(REZI_FOLDER);
   $i=0;
   // Verzeichnis lesen
    while ($file = readDir($verzeichnis)) {
     // Höhere Verzeichnisse nicht anzeigen!
      if ($file != "." && $file != "..") {
	  $i++;
	    	@$rezi_file = fopen(REZI_FOLDER.'/'.$file,'r');
				
				flock($rezi_file,LOCK_SH);
				echo '<div style="width:70%; height:auto; margin:5px auto 5px auto; padding: 5px 5px 0px 5px; border: 1px solid #000;">';
				// Daten lesen						    
					while (!feof($rezi_file)) {
						$bemerkungen = fgets($rezi_file,999);
							echo $bemerkungen.'<br/>'."\n";
					}
				echo '</div>';
				flock($rezi_file,LOCK_UN);
				// Datei schließen
				fclose($rezi_file);
      }
    }
 // Verzeichnis schließen
closeDir($verzeichnis);

 // Ordner leer.
if($i==0) {
   echo return_error('Es sind noch keine Bemerkungen vorhanden...');
}  
?>
 
Wenn du kannst, dann formatier den Dateinamen anderst und du kannst nachher gleich nach dem Dateinamen sortieren.
Code:
JJJJ-MM-DD_HH-MM-SS-bemerkung.txt
Dann schreibst du die Dateiinhalte in ein Array mit dem Dateinamen als Schlüssel, sortieren und ausgeben
PHP:
//Alle Bemerkungen einlesen
while ($file = readDir($verzeichnis)) {
	if ($file != "." && $file != "..") {
		$bemerkungen[$file] = file_get_contents(REZI_FOLDER.'/'.$file);
	}
}
//Sortieren (Absteigend nach Key)
krsort($bemerkungen);
//und Ausgeben
foreach($bemerkungen as $bemerkung){
	echo "{$bemerkung}<br />";
}
 
Wenn du kannst, dann formatier den Dateinamen anderst und du kannst nachher gleich nach dem Dateinamen sortieren.
Code:
JJJJ-MM-DD_HH-MM-SS-bemerkung.txt
....
//Sortieren (Absteigend nach Key)
krsort($bemerkungen);
//und Ausgeben
foreach($bemerkungen as $bemerkung){
	echo "{$bemerkung}<br />";
}

Danke Dir für den Ansatz, jedoch habe ich gerade das Phänomen das bei 2. vorhandenen Dateien die Ausgabe so erfolgt:
Datum: 11.10.2011 12:43:35 Uhr | IP:127.0.0.1 Name: test Bemerkung: dsfgsdg
Datum: 11.10.2011 12:43:46 Uhr | IP:127.0.0.1 Name: 1234 Bemerkung: sdfsdfsdfsdfsdfs
Datum: 11.10.2011 12:43:35 Uhr | IP:127.0.0.1 Name: test Bemerkung: dsfgsdg
 
Zeig mal den Code wie du ihn anwendest. Hast du sonst noch ein irgendwo ein echo?
Was zeigt var_dump($bemerkungen) ?
 
PHP:
// Öffnet ein Unterverzeichnis
   $verzeichnis = openDir(REZI_FOLDER);
   $i=0;
   // Verzeichnis lesen
    while ($file = readDir($verzeichnis)) {
     // Höhere Verzeichnisse nicht anzeigen!
      if ($file != "." && $file != "..") {
	   $bemerkungen[$file] = file_get_contents(REZI_FOLDER.'/'.$file);
      }
    }
 // Verzeichnis schließen
closeDir($verzeichnis);

//Sortieren (Absteigend nach Key)
krsort($bemerkungen);
//und Ausgeben
foreach($bemerkungen as $bemerkung){
    echo "{$bemerkung}<br />";
} 
	var_dump($bemerkungen);



Es ist kein weiteres ECHO vorhanden.
 
Warum machst du es nicht mittels stat()-Funktion? Das wäre IMHO etwas genauer. Im resultiernden Array steht an Index 9 der Zeitstempel der letzten Änderung.
 
Entschuldige Yaslaw, hatte ich vergessen mit zu notieren:

array(3) { ["2011-10-11_13-25-43.txt"]=> string(78) "Datum: 11.10.2011 13:25:43 Uhr | IP:127.0.0.1 Name: 1234 Bemerkung: dfgdfgdg " ["2011-10-11_13-24-07.txt"]=> string(78) "Datum: 11.10.2011 13:24:07 Uhr | IP:127.0.0.1 Name: jkljkl Bemerkung: hjkhjk " ["2011-10-11_13-23-47.txt"]=> string(76) "Datum: 11.10.2011 13:23:47 Uhr | IP:127.0.0.1 Name: test Bemerkung: dfgdfg " }
 
@saftmeister
Ist gefährlich. Wenn etwas nachher korrigiert wird oder das gesamte Projekt später auf ein anderer Server kopiert wird, verändern sich die Zeitstempel der Datei.
 
Zurück