die drei aktuellsten Dateien aus einem Ordner auslesen

Paula

Erfahrenes Mitglied
Servus,

ich habe einen Ordner, der Dateien beinhaltet und die drei aktuellsten Dateien hätte ich gerne angezeigt bekommen. Als Ansatz habe ich alle Dateien in ein Array gepackt. Anschließend sollte eine Sortierung folgen und die Ausgabe von den ersten drei Elementen. Nur bei der Sortierung hakt es bei mir.
PHP:
$dir = '/export/home/scp/';
$dir_handle = opendir( $dir );
while( false !== ( $file = readdir( $dir_handle ) ) ) {
	if( substr( $file, 0, 1 ) != '.' ) {
		$files['time'][] = date ("F d Y H:i:s.", filemtime( $dir . $file ) );
		$files['name'][] = $file;
	}
}

arsort( $files['time'] );
echo '<pre>';
print_r( $files );
echo '</pre>';

foreach( $files as $file ) {
	$content.= $file['name'] .' '. $file_size .'<br />';
}
Ist meine Vorgehensweise eigentlich gut gewählt oder welche anderen Mehtoden könnte ich anwenden?
 
Du wandelst zuerst mal einen Timestamp in ein Datum um, und möchtest es dann Sortieren. Da es dann versucht, einen String zu Sortieren ist es verständlich, das es einfach nach dem ersten Buchstaben sortiert. Ich würde also zuerst das Array mit dem Timestamp abfüllen, und bei der Ausgabe dann den Timestamp in dein gewünschtes Format wandeln.

PHP:
$dir = './'; 
$dir_handle = opendir( $dir ); 

while( false !== ( $file = readdir( $dir_handle ) ) ) { 
    if( substr( $file, 0, 1 ) != '.' ) { 
        $files['time'][] = filemtime( $dir . $file ); 
        $files['name'][] = $file; 
    } 
} 

arsort( $files['time'] ); 

echo '<pre>'; 
print_r( $files ); 
echo '</pre>';

MFG
X
 
Ich tippe mal arsort kann mit dem Datum nichts anfangen.

So sollte es funktionieren:
PHP:
$dir = '/export/home/scp/';
$dir_handle = opendir( $dir );
while( false !== ( $file = readdir( $dir_handle ) ) ) {
	if( substr( $file, 0, 1 ) != '.' ) {
		$files['time'][] = filemtime( $dir . $file );
		$files['name'][] = $file;
	}
}

arsort( $files['time'] );
echo '<pre>';
print_r( $files );
echo '</pre>';

foreach( $files as $file ) {
	$content.= $file['name'] .' '. $file_size .'<br />';
}

€dit: Da war wohl wer schneller ;>
 
Zuletzt bearbeitet:
Das ausgeschriebene Datum hatte ich nur testweise drinne, hatte es leider jedoch vergessen bei meinem Beitrag wieder rückgängig zu machen.

Ob arsort() überhaupt die korrekte Funktion ist, weiss ich leider nicht. Mit euren Hilfen klappt es leider auch nicht so recht.
 
Wo liegt denn das Problem? arsort() ist schon die richtige Funktion. print_r müsste dir die Dateien in umgekehrter Reihenfolge ausgeben, also die neueste zuerst.
 
Ich habe nun folgende Lösung gewählt:
PHP:
# Pfad zu den CB-Report Dateien
$dir = '/export/home/scp/';
# Shell Befehl zur Anzeige der Dateien mit unten genannten Kritierien
# Darstellung: Listenform
# Sortierung: zeitlich absteigend
# Filterung: nur CB-Report Dateien
# Filterung: nur die ersten fünf Dateien
$command = 'ls -tl | grep cb_report | head -n 5';
# Ausführung des Shell Befehl inklusive Rückgabe
$shell = shell_exec( 'cd '. $dir .'; '. $command );
# Darstellung der Rückgabe im Skript
$content.= parser( $shell );

Danke für eure Hilfe.
 
Zurück