die letzten x dateien eines ordners ausgeben?

mwebmedia

Grünschnabel
Morgen,
also ich hab folgende Frage; Ich würde gerne die letzten X (in meinem Falle 12) Bilder ausgeben die als letztes hinzugefügt bzw. hochgeladen wurden. Denke mal, das dass ganze per WHILE-Schleife oder FOREACH läuft. Nur leider hab ich keine Ahnung wie ich damit anfangen soll, bitte um hilfe.

MfG
 
Etwas mehr Infos wären hilfreich.
Speicherst du die Daten einfach so in einem Verzeichnis, oder haben sie einen bestimmten generischen Namen? Wird der Upload in einer Datenbank protokolliert?

Letzteres wäre am leichtesten, dann könntest du die Sortierung über das SQL Statement erreichen. Sonst musst du halt das Verzeichnis Scannen.
 
Wie Napofis schon geschrieben hat ein paar mehr Infos wären hilfreich.

Wenn die Bilder in einem bestimmten Ordner liegen, könntest du mit filetime das Dateidatum und die -uhrzeit ermitteln und damit die Ausgabe gestallten.
 
@tombe:
An filemtime hatte ich auch schon gedacht, ich bin mir jetzt aber nicht mehr so sicher ob eine Kopieroperation das Modifikationsdatum beeinflusst?
 
Danke schonmal für die tollen Antworten :))
Ehm.. Ja, die Dateien liegen in einem bestimmten Ordner der sich "shots" nennt.
Die Dateien werden weder protokoliert noch sonst etwas. Die Dateien btw. Bilder werden durch ein Tool hochgeladen. Und nun will ich die letzten 20 Bilder die hochgeladen wurden anzeigen.
MfG
 
So könnte es funktionieren:

PHP:
$folder = '/absoluter/pfad/zum/ordner/mit/den/bildern';

$files_array = array();

$d = opendir($folder);
if ($d) {
  while($e = readdir($d)) {
    $stats = stat($folder.'/'.$e);
    $files_array[] = array($stats['mtime'] => $e);
  }
  closedir($d);
}

arsort($files_array);

$newest_files = array_slice($files_array, 0, 20);

echo "<pre>";
var_dump($newest_files);
echo "</pre>";

Ungetestet!
 
Zuletzt bearbeitet:
So könnte es funktionieren:

PHP:
$folder = '/absoluter/pfad/zum/ordner/mit/den/bildern';

$files_array = array();

$d = opendir($folder);
if ($d) {
  while($e = readdir($d)) {
    $stats = stat($folder.'/'.$e);
    $files_array[] = array($stats['mtime'] => $e);
  }
  closedir($d);
}

arsort($files_array);

$newest_files = array_slice($files_array, 0, 20);

echo "<pre>";
var_dump($newest_files);
echo "</pre>";

Ungetestet!

funktoniert leider nicht wirklich :/ ließt immernoch quer durcheinander. Zwar alle Screenshots von der gleichen und auch letzten Stunde, dennoch durcheinander verteilt. Ein Vorschlag? :/

array(20) {
[0]=>
array(1) {
[1313691879]=>
string(40) "20_24_40 PeterderTreter%40vollboese_.jpg"
}
[1]=>
array(1) {
[1313693077]=>
string(40) "20_44_37 PeterderTreter%40vollboese_.jpg"
}
[2]=>
array(1) {
[1313690832]=>
string(28) "20_07_12 PeterderTreter_.jpg"
}
[3]=>
array(1) {
[1313691284]=>
string(40) "20_14_44 PeterderTreter%40vollboese_.jpg"
}
[4]=>
array(1) {
[1313693512]=>
string(40) "20_51_52 PeterderTreter%40vollboese_.jpg"
}
[5]=>
array(1) {
[1313692185]=>
string(40) "20_29_45 PeterderTreter%40vollboese_.jpg"
}
[6]=>
array(1) {
[1313692310]=>
string(40) "20_31_50 PeterderTreter%40vollboese_.jpg"
}
[7]=>
array(1) {
[1313772163]=>
string(2) ".."
}
[8]=>
array(1) {
[1313692942]=>
string(40) "20_42_22 PeterderTreter%40vollboese_.jpg"
}
[9]=>
array(1) {
[1313693670]=>
string(40) "20_54_30 PeterderTreter%40vollboese_.jpg"
}
[10]=>
array(1) {
[1313692281]=>
string(40) "20_31_21 PeterderTreter%40vollboese_.jpg"
}
[11]=>
array(1) {
[1313690649]=>
string(28) "20_04_09 PeterderTreter_.jpg"
}
[12]=>
array(1) {
[1313693594]=>
string(40) "20_53_14 PeterderTreter%40vollboese_.jpg"
}
[13]=>
array(1) {
[1313690885]=>
string(28) "20_08_05 PeterderTreter_.jpg"
}
[14]=>
array(1) {
[1313693125]=>
string(40) "20_45_25 PeterderTreter%40vollboese_.jpg"
}
[15]=>
array(1) {
[1313691830]=>
string(40) "20_23_50 PeterderTreter%40vollboese_.jpg"
}
[16]=>
array(1) {
[1313690949]=>
string(40) "20_09_09 PeterderTreter%40vollboese_.jpg"
}
[17]=>
array(1) {
[1313692404]=>
string(40) "20_33_24 PeterderTreter%40vollboese_.jpg"
}
[18]=>
array(1) {
[1313691079]=>
string(40) "20_11_19 PeterderTreter%40vollboese_.jpg"
}
[19]=>
array(1) {
[1313692140]=>
string(40) "20_29_00 PeterderTreter%40vollboese_.jpg"
}
}
 
Der Bildname steht doch als Index im assoziativen Array. Das kannst du mit foreach durchlaufen:

PHP:
foreach($newest_files as $filename => $lastModTime) {
  echo $filename . "<br/>";
}
 
Zurück