Supportnet / Forum / Skripte(PHP,ASP,Perl...)
ausgelesenes Verzeichnis nach Datum sortieren
Frage
Hallo,
ich lese mit folgendem Script die Dateien meines Verzeichnisses aus. Ich möchte aber nun erreichen, dass die Dateien zeitlich sortiert angezeigt werden, also sprich, die aktuellste Datei zuerst. Ich habe es schon hinbekommen, die Zeit jeder Datei auszulesen, aber ich habe keine Idee, wie ich die nun sortieren kann? Hier das Script:
[code]
<?
$handle=opendir ('../pdf/');
$path='../pdf/';
echo '<table width="500" border="0" cellspacing="0" cellpadding="0">';
echo '<tr class="normalfett">
<td width="265">Dateiname</td>
<td width="99">Dateigröße</td>
<td width="136">Datum/Uhrzeit</td>
</tr>
<tr class="normal">
<td> </td>
<td> </td>
<td> </td>
</tr>';
while (false !== ($file = readdir ($handle)))
{
if ($file=='.')
{
$file ='';
}
if ($file=='..')
{
$file ='';
}
if ($file<>'')
{
$aktuell=stat($path.$file);
$timestamp=$aktuell[9]; //enthält das Datum der letzten Modifizierung in Unixtime
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
$size=number_format(filesize($path.$file)/1024);
echo '<tr class="normal">
<td><a href="'.$path.$file.'" target="_blank" >'.$file.'</a></td>
<td>'.$size.' KB</td>
<td>'.$datum.' / '.$uhrzeit.'</td>
</tr>';
}
}
closedir($handle);
echo '</table>';
?>
[/code]
Wer hat einen Tipp für mich?
Kathrin
Antwort 1 von Nessus
Hi,
lege alles in ein Array und sortiere mit der Funktion Sort
http://de2.php.net/manual/de/function.sort.php
Nessus
lege alles in ein Array und sortiere mit der Funktion Sort
http://de2.php.net/manual/de/function.sort.php
Nessus
Antwort 2 von kathrin77
Ah Danke, das werde ich mal probieren. Hoffe, ich komme klar, wenn nicht, dann melde ich mich noch mal :-)))!
Kathrin
Kathrin
Antwort 3 von kathrin77
Also ich habe leider einige Probleme mit den Arrays. Hier ist mal bisheriger Stand (die Sortierfunktion ist aber leider noch nicht enthalten). Anscheinend speichere ich meine Variablen falsch in dem Array $all_stat? Ich möchte ja die statistischen Informationen jeder Datei in einem Array speichern und dann sortiert nach Datum ausgeben.
$dateianzahl=0;
$handle=opendir ('../pdf/');
$path='../pdf/';
echo '<table width="600" border="0" cellspacing="0" cellpadding="0">';
echo '<tr class="normalfett">
<td width="340">Dateiname</td>
<td width="100">Dateigröße</td>
<td width="160">Datum/Uhrzeit</td>
</tr>
<tr class="normal">
<td> </td>
<td> </td>
<td> </td>
</tr>';
//Anahl der Dateien im Verzeichnis ermitteln
while (false !== ($file = readdir ($handle)))
{
if ($file=='.')
{
$file ='';
}
if ($file=='..')
{
$file ='';
}
if ($file<>'') $dateianzahl=$dateianzahl+1;
}
$all_stat[]=array(); //leere Array
while (false !== ($file = readdir ($handle)))
{
for ($i=0; $i<$dateianzahl; $i++)
{
if ($file<>'')
{
$aktuell=stat($path.$file);
$timestamp=$aktuell[9]; //enthält das Datum der letzten Modifizierung in Unixtime
$size=number_format(filesize($path.$file)/1024); //Dateigröße
$dateiname=$file; //Dateiname
$all_stat[$i]=array_push ($all_stat, $path, $file, $timestamp, $size, $dateiname);
}
}
}
for ($i=0; $i<$dateianzahl; $i++)
{
$timestamp=$all_stat[$i][2];
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i:s",$timestamp);
echo '<tr class="normal">
<td><a href="'.$all_stat[$i][0].$all_stat[$i][1].'" target="_blank" >'.$all_stat[$i][1].'</a></td>
<td>'.$all_stat[$i][2].' KB</td>
<td>'.$datum.' / '.$uhrzeit.'</td>
</tr>';
}
closedir($handle);
echo '</table>';
Antwort 4 von kathrin77
Ich hab es nun hinbekommen mit dem Auslesen :-))), aber noch ein Problem mit dem sortieren. Hier mal das Script, welches jetzt für das Auslesen funktioniert:
So, nun wollte ich noch nach Datum sortieren und mache es wie folgt:
var_dump($datum); gibt folgendes aus:
array(6) { [0]=> int(1092916446) [1]=> int(1092916574) [2]=> int(1095159628) [3]=> int(1095159628) [4]=> int(1092915074) [5]=> int(1096547054) }
Das ist , denke ich, ok? Nach der Sortierung erhalte ich mit var_dump($sort_datum); das:
bool(true)
Es sollte doch aber eine sortierte Liste erscheinen, oder??? Steig da nicht ganz durch. Hat jemand einen Tipp? Ich habe schon die verschiedenen Sortierfunktionen durch, also sort, asort, usort....
$dateianzahl=0;
$handle=opendir ('../pdf/');
$path='../pdf/';
$all_stat=array(array()); //leere Array
echo '<table width="600" border="0" cellspacing="0" cellpadding="0">';
echo '<tr class="normalfett">
<td width="340">Dateiname</td>
<td width="100">Dateigröße</td>
<td width="160">Datum/Uhrzeit</td>
</tr>
<tr class="normal">
<td> </td>
<td> </td>
<td> </td>
</tr>';
//Anzahl der Dateien im Verzeichnis ermitteln
while (false !== ($file = readdir ($handle)))
{
if ($file=='.')
{
$file ='';
}
if (($file=='qtofm.php') || ($file=='foldericon.gif') || ($file=='fileicon.gif') || ($file=='arrowicon.gif'))
{
$file ='';
}
if ($file=='..')
{
$file ='';
}
if ($file<>'')
{
$dateianzahl=$dateianzahl+1;
$aktuell=stat($path.$file);
$timestamp=$aktuell[9]; //enthält das Datum der letzten Modifizierung in Unixtime
$size=number_format(filesize($path.$file)/1024); //Dateigröße
array_push ($all_stat,array($path, $file, $timestamp, $size)); //Dateiinfos zu Array hinzufügen
}
}
//Ausgabe der Dateinamen und Co.
for ($i=1; $i<=$dateianzahl; $i++)
{
$timestamp=$all_stat[$i][2];
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i:s",$timestamp);
echo '<tr class="normal">
<td><a href="'.$all_stat[$i][0].$all_stat[$i][1].'" target="_blank" >'.$all_stat[$i][1].'</a></td>
<td>'.$all_stat[$i][3].' KB</td>
<td>'.$datum.' / '.$uhrzeit.'</td>
</tr>';
}
closedir($handle);
echo '</table>';
So, nun wollte ich noch nach Datum sortieren und mache es wie folgt:
//Datum aus $all_stat auslesen und in einem Array einlesen
for ($j=1; $j<=$dateianzahl; $j++)
{
$datum[]=$all_stat[$j][2];
}
//Datum sortieren
var_dump($datum);
echo '<br>';
$sort_datum=asort($datum);
var_dump($sort_datum);
var_dump($datum); gibt folgendes aus:
array(6) { [0]=> int(1092916446) [1]=> int(1092916574) [2]=> int(1095159628) [3]=> int(1095159628) [4]=> int(1092915074) [5]=> int(1096547054) }
Das ist , denke ich, ok? Nach der Sortierung erhalte ich mit var_dump($sort_datum); das:
bool(true)
Es sollte doch aber eine sortierte Liste erscheinen, oder??? Steig da nicht ganz durch. Hat jemand einen Tipp? Ich habe schon die verschiedenen Sortierfunktionen durch, also sort, asort, usort....

