okidoki
Goto Top

Php: Verzeichnis mit Datum, Zeit und sortiert auflisten

Hallo,

bin seit einigen Tagen dabei oben genannte Lösung zu suchen. Eine Auflistung gelingt mir, allerdings bekomme ich es einfach nicht hin, zur jeweiligen Datei auch den Zeitstempel anzeigen zu lassen. Ich habe einzelne Anzeigeblöcke, hier im vorderen Dateinamen "123*", d.h., die Datei sollen nach ihrem Dateinamen, NICHT nach dem Erstellungsdatum sortiert sein!
Btw: Klasse wäre, wenn ich eine Nummerierung der Datein ein- und ausschalten könnte ... also, wüsste, was ich einbauen müsste!

<?php
foreach (glob("123*.php") as $filename) {  
    echo "<a href=\"$filename\" target=\"_blank\">$filename</a><br>\n";  
}
?>


Wäre über einen Tipp dankbar face-smile

Gruß
okidoki

Content-ID: 665508

Url: https://administrator.de/forum/php-verzeichnis-mit-datum-zeit-und-sortiert-auflisten-665508.html

Ausgedruckt am: 22.12.2024 um 18:12 Uhr

148121
Lösung 148121 07.04.2021 aktualisiert um 22:16:55 Uhr
Goto Top
$files = glob('123*.php');  
asort($files);
$cnt = 1;
foreach($files as $file){
    echo "$cnt|$file|" . date('Y-m-d H:i:s',filemtime($file)) . "<br />";  
    $cnt++;
}
bin seit einigen Tagen dabei oben genannte Lösung zu suchen
Autsch. Wieso noch suchen?! Selbst ist die/der Frau/Mann face-smile! Alles was du dafür brauchst steht hier, man müsste es einfach nur mal lesen!

Gruß w.
OKIDOKI
OKIDOKI 07.04.2021 aktualisiert um 20:38:18 Uhr
Goto Top
Oh klasse!
Ich danke dir face-smile
Nun habe ich noch einen Zeilenumbruch eingefügt, dann sieht es gleich noch schicker aus ...

<?php
$files = glob('123*.php');  
asort($files);
$cnt = 1;
foreach($files as $file){
    echo "$cnt|$file|" . date('Y-m-d H:i:s',filemtime($file)) . '<br>';  
    $cnt++;
}
?>

Zur Abrundung hatte ich gedacht, ich lese jetzt einfach noch die Datei aus (besteht aus einem Wort, Semikolon, eine Zahl). Nun merke ich aber, dass ein einfaches Einsetzen nicht reicht, zudem benötige ich nur das Wort:

<?php
$files = glob('123*.php');  
asort($files);
inhalt =  file_get_content ($files as $file);
$cnt = 1;
foreach($files as $file){
    echo "$cnt|$file|" . date('Y-m-d H:i:s',filemtime($file)) . $inhalt . '<br>';  
    $cnt++;
}
?>


Hast du dazu noch eine Idee?
Bei den einstelligen Zahlen ist durch die fehlende Null ein Versatz, gibt es dazu auch eine Lösung?

1 |1230.php | 22:03:2021 | 14:38:10
2 |1231.php | 22:03:2021 | 14:38:11
3 |1232.php | 22:03:2021 | 14:38:11
4 |1233.php | 22:03:2021 | 14:38:12
5 |1234.php | 22:03:2021 | 14:38:12
6 |1235.php | 22:03:2021 | 14:38:13
7 |1236.php | 22:03:2021 | 14:38:13
8 |1237.php | 22:03:2021 | 14:38:14
9 |1238.php | 22:03:2021 | 14:38:14
10 |1239.php | 22:03:2021 | 14:38:15
wiesi200
wiesi200 07.04.2021 um 20:48:26 Uhr
Goto Top
Hallo,

findet man auch auf der schon angegebenen Seite.
https://www.php.net/manual/de/function.str-pad.php
OKIDOKI
OKIDOKI 07.04.2021 um 23:19:00 Uhr
Goto Top
... dann benötige ich eigentlich gar kein Forum mehr ...
da ich totaler Anfänger bin steige ich - trotz mehrfachen Lesens - einfach nicht durch ...

Aber trotzdem danke für deinen Tipp wiesi200!

Insbesondere gilt mein Dank noch einmal warranty! Vielen Dank für deine Mühe 👌
wiesi200
Lösung wiesi200 08.04.2021 um 06:02:48 Uhr
Goto Top
Naja PHP ist eigentlich wirklich gut dokumentiert mit sehr vielen Beispielen und wirklich anfängerfreundlich. Dein Wunsch steht sogar fast 1 zu 1 nur eben mit 4 Stellen relativ weit unten im Kommentarbereich

Wenn du dir mal c++ oder son nen Spaß ansieht wirst du das schnell feststellen.

Bei Zeile 7 beim "echo" anstelle von $cnt kommt der spaß
str_pad($cnt,2,'0',STR_PAD_LEFT)

Somit füllst du auf 2 Stellen mit dem Wert 0 auf der Linken Seite des Strings auf.
OKIDOKI
OKIDOKI 08.04.2021 aktualisiert um 09:19:15 Uhr
Goto Top
Moin,
so, habe alles soweit hinbekommen face-smile!
Mein Problem war, dass ich versucht habe Text einzubinden, allerdings ohne "", was immer wieder zum Absturz führte - ich glaube zu wissen, was ihr denkt ... jetzt aber face-smile

<?php
$files = glob('123*.csv');  
asort($files);
$cnt = 1;
foreach($files as $file){
echo str_pad($cnt, 2, "0", STR_PAD_LEFT) . ". " . $file . date('d:m:Y | H:i:s',filemtime($file)) ; readfile("$file", "r"). '<br>';  
    $cnt++;
}
?>

Leider erzeugt das Öffnen des files die Meldung "Resource id #6", der Dateiinhalt wird aber nicht angezeigt ...

Readfile ist wohl die bessere Alternative face-smile face-smile face-smile
wiesi200
wiesi200 08.04.2021 um 09:00:38 Uhr
Goto Top
OKIDOKI
OKIDOKI 08.04.2021 aktualisiert um 09:18:36 Uhr
Goto Top
yep, readfile wars ...
oben geändert, nur, warum steht der Inhalt jetzt am Anfang vor der Aufzählung?
Weil es vor den Punkt mit Semi eingebunden werden muss - schlag vor'n Kopf!


Also, noch einmal vielen Dank für eure Hilfe face-smile
148121
148121 08.04.2021 aktualisiert um 10:03:45 Uhr
Goto Top
Zitat von @OKIDOKI:

yep, readfile wars ...
oben geändert, nur, warum steht der Inhalt jetzt am Anfang vor der Aufzählung?
Falsche Funktion genommen, readfile ist für die alleinige Auslieferung von Dateien an den Client, nicht zum Auslesen und gleichzeitigen Verarbeiten des Inhalts, dafür gibt's file_get_contents
OKIDOKI
OKIDOKI 08.04.2021 aktualisiert um 14:55:28 Uhr
Goto Top
Jetzt hast du mich neugierig gemacht face-smile

Wenn diese Funktion zum Verarbeiten ist, wäre es doch möglich, die Ausgabe in einer bestimmten Farbe zu erzeugen, oder?

1. Mein Vorhaben listet die Ergebnisse von Schulaufgaben verschiedener Klassen auf. In den ausgelesenen Dateien steht nur "vollständig" bzw. "unvollständig". Nun würde ich gerne unvollständig in rot und vollständig in grün ausgeben.
Ich hatte mich gerade mit Highlighting beschäftigt, wobei ich glaube, dass es eine Nummer zu groß ist ... und vermutlich mit php einfacher geht, wenn es gleich um das Auslesen und Verarbeiten der Variable geht.


ok, ich denke die Tabelle habe ich im Griff. Ich baue die Tabelle um den php herum, das geht ganz gut!

Es bleiben also Fragen face-smile face-smile
148121
Lösung 148121 08.04.2021 aktualisiert um 15:39:15 Uhr
Goto Top
Zitat von @OKIDOKI:

Jetzt hast du mich neugierig gemacht face-smile
Körner hin werf'
Wenn diese Funktion zum Verarbeiten ist, wäre es doch möglich, die Ausgabe in einer bestimmten Farbe zu erzeugen, oder?
Alles möglich.
1. Mein Vorhaben listet die Ergebnisse von Schulaufgaben verschiedener Klassen auf. In den ausgelesenen Dateien steht nur "vollständig" bzw. "unvollständig". Nun würde ich gerne unvollständig in rot und vollständig in grün ausgeben.
Ich hatte mich gerade mit Highlighting beschäftigt, wobei ich glaube, dass es eine Nummer zu groß ist ... und vermutlich mit php einfacher geht, wenn es gleich um das Auslesen und Verarbeiten der Variable geht.
Es bleiben also Fragen face-smile face-smile
Ah ja never ending Thread mal wieder ...
<?php
$files = glob('123*.php');  
asort($files);
$cnt = 1;
$tbl = '<table class="mytable"><tbody><tr><th>No.</th><th>Name</th><th>Datum/Zeit</th></tr>';  
foreach($files as $file){
	$content = file_get_contents($file);
	$class = preg_match('/^vollständig/im',$content) ? 'complete' : 'incomplete';  
	$tbl .= "<tr class=\"" . $class . "\"><td>" . $cnt . "</td><td>" . $file . "</td><td>" . date('Y-m-d H:i:s',filemtime($file)) . "</td></tr>";  
    $cnt++;
}
$tbl .= '</tbody></table>';  
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">  
<title>Demo</title>
</head>
<style>
body {font-family:sans-serif; font-size:0.9em;}
.mytable {border-collapse:collapse}
.mytable th {background-color:rgba(238,238,238,1); padding:5px}
.mytable td {
	border: 0px;
	padding: 5px;
	text-align:right;
}
.complete {background-color:rgba(102,255,102,1);}
.incomplete {background-color:rgba(255,102,51,1);}
</style>
<body>
<?php echo $tbl;?>
</body>
</html>
Isch bin dann wech ...
OKIDOKI
OKIDOKI 08.04.2021 aktualisiert um 16:37:28 Uhr
Goto Top
Isch schwöre: KEIN never ending ...

SUPER, vielen, vielen Dank!!! Genau so!

Ich hatte ja schon geschlossen, dann kam die Idee mit file_get_contents face-smile face-smile face-smile

Im Ernst: So is fertisch!

Ich bin sprachlos, dankbar und WUNSCHLOS (so kann es nämlich ab morgen laufen, vorletzter Ferientag)

Dieses Forum ist Mega, dank dir warranty!
okidoki
wiesi200
wiesi200 08.04.2021 um 20:12:20 Uhr
Goto Top
Bei uns gibt's viele gute Leute. In der Regel wird nur in der Regel eigenleistung erwartet und wir geben meist nur Hilfe zu Selbsthilfe.
Vor allem wenn's nach Hausaufgaben aussieht.
So wie ein guter Lehrer 😉
OKIDOKI
OKIDOKI 08.04.2021 um 22:22:03 Uhr
Goto Top
Gute Lehrer face-smile ... und natürlich wiesi200 nicht zu vergessen face-smile!!!

Das ist natürlich manchmal verzwickt, wenn man sich mithilfe des Forums (Selbsthilfe, was ich total gut finde) einerseits eine Lösung erarbeitet hat und dann ein neues Problem auftaucht, das man gar nicht erwartet hätte ...

Ich bin z.B. gerade dabei den Code umzumodellieren, weil ich bei einem funktionierenden auch richtig Spaß dran haben kann! Die Frustration anfänglich ist, weil ich (vielleicht auch andere) gar nicht wissen, wie sie einsteigen sollen.
Insofern hat mir eine fertige Lösung noch nie etwas gebracht, sondern die Selbsthilfe ist ein großes Geschenk dieses Forums!
OKIDOKI
OKIDOKI 10.04.2021 um 11:07:03 Uhr
Goto Top
Ich weiß, es soll kein never ... werden! Eine Bitte habe dennoch zum ersten Code von warranty, den ich gerne (zusätzlich zum neuen unten) weiter nutzen würde:
Wie lässt sich die Ausgabe als Link anzeigen?
Mein Versuch scheitert leider:
<?php
$files = glob('123*.php');  
asort($files);
$cnt = 1;
foreach($files as $file){
<li><a href= echo "$cnt|$file|" . date('Y-m-d H:i:s',filemtime($file)) . '<br>'; </a></li>  
    $cnt++;
}
?>
148121
Lösung 148121 10.04.2021 aktualisiert um 11:42:26 Uhr
Goto Top
Ich weiß, es soll kein never ... werden!
Hat schon angefangen ...
Autsch ... face-confused
echo "<li><a href=\"$file\">$cnt|$file|" . date('Y-m-d H:i:s',filemtime($file)) . "</a></li>";  
You have a looooong way to go min jung.

thread notification for my side = off

w.
OKIDOKI
OKIDOKI 10.04.2021 um 11:53:30 Uhr
Goto Top
Jetzt bist DU doch der Beste!

Ich danke dir von Herzen -
Thread - closed -