Hallo,
ich lese mit folgendem Code die Dateien in einem Ordner aus und gebe sie aus:
$handle=opendir ('.');
while ($file = readdir ($handle)) {
if ($file != "." && $file != "..")
{
echo "".$file."";
}
}
closedir($handle);
Wie kann ich das ganze denn jetzt nach den Dateinamen sortieren? Ich verzweifel langsam.
Hi :)
gib die Dateinamen nicht direkt aus, sondern speichere sie in einem Array. Mit dem Array kannst du dann beliebig weiterarbeiten...
$handle=opendir ('.');
while ($file = readdir ($handle)) {
if ($file != "." && $file != "..")
{
$allfiles[] = $file;
}
}
closedir($handle);
if (isset($allfiles)) {
// array sortieren:
sort($allfiles);
// aus dem Array einen String machen und ausgeben
echo implode(', ', $allfiles);
// Speicher aufräumen
unset($allfiles);
}
entweder spinnt mein server oder die sortierfunktion hat nen hau weg. hier mal die sortierung, die er mir jetzt bringt:
In_Strict_Confidence_-_Exile_Paradise.rar
A_Life_[Divided]_-_Far.rar
A_Life_[Divided]_-_Virtualized.rar
Apoptygma_Berzerk_-_Love_to_Blame_(PROMO).rar
Bullet_for_my_Valentne_-_Tears_don't_fall.rar
Camouflage_-_Relocated_(PROMO).rar
Eisheilig_-_Elysium.rar
Eisherz_-_Kalte_Zeiten.rar
wieso steht an erster stelle In Str... und danach der rest ist ordentlich sortiert?
außerdem hab ich noch probleme mit der formatierung. ich schick dir den link zu dem teil und zugangsdaten per PM. ist nämlich nichts für die öffentlichkeit.
danke auf jeden fall.
gruß
steff
Ok, hat sich erledigt.
Jetzt hab ich aber irgendwie das Problem, das das Datum nicht mehr korrekt ausgelesen wird. Es steht immer auf dem 1. Januar 1970. Im Forum wird aber das korrekte Datum angezeigt.
Vielleicht ne Ahnung woran das liegen kann?
Hat sich erledigt, Fehler gefunden.
Danke schön.
Moin :)
ZitatOk, hat sich erledigt.
Was war's denn? Ist ja ein komisches Phänomen...
Wie liest du das Datum denn wo aus?
1. Januar 1970 ist der Beginn der Unix-Zeitrechnung und entspricht dem Unix-timestamp = 0. Also dürfte das Datum, das du da verwendest entweder ungültig, oder leer, oder evtl. kleiner als der 1.1.1970 sein.
So sieht jetzt der phpteil aus:
<?php
function Dateigroesse($URL)
{
$Groesse = filesize($URL);
if($Groesse < 1000)
{
return number_format($Groesse, 0, ",", ".")." Bytes";
}
elseif($Groesse < 1000000)
{
return number_format($Groesse/1024, 0, ",", ".")." kB";
}
else
{
return number_format($Groesse/1048576, 0, ",", ".")." MB";
}
}
function GetFileTime($file)
{
$time = filectime($file);
return $time;
}
$handle=opendir ('.');
while ($file = readdir ($handle)) {
if ($file != "." && $file != ".." && $file !="daten.txt" && $file != ".htaccess" && $file != "index.php" && $file != "new.gif" && $file != "disk.png") {
$allfiles[] = $file;
}
}
closedir($handle);
if (isset($allfiles)) {
// array sortieren:
sort($allfiles);
// aus dem Array einen String machen und ausgeben
$zaehler=count($allfiles);
$date_aktuell = time();
for ($i=0; $i<$zaehler; $i++) {
$timestamp = GetFileTime($allfiles[$i]);
// wenn nicht älter als 14 Tage
if(($date_aktuell - $timestamp) < 1209600) {
echo "<tr><td><a href=\"http://XXXXXXXXXXX/".$allfiles[$i]."\"><img src='disk.png' border='0'></a></td><td><a href=\"http://XXXXXXXXXXXXX/".$allfiles[$i]."\"><font color='#FFFFFF'>".$allfiles[$i]."</font></a></td><td>".date('j. F Y', $timestamp)."</td><td>".Dateigroesse($allfiles[$i])."</td><td width='35'><img src='new.gif'></td>";
}
else {
echo "<tr><td><a href=\"http://XXXXXXX/".$allfiles[$i]."\"><img src='disk.png' border='0'></a></td><td><a href=\"http://XXXXXXXXXX/".$allfiles[$i]."\">".$allfiles[$i]."</a></td><td>".date('j. F Y', $timestamp)."</td><td>".Dateigroesse("$allfiles")."</td><td width='35'></td>";
}
}
// Speicher aufräumen
unset($allfiles);
}
?>
gibts vielleicht noch ne andere Möglichkeit das erstellungsdatum einer datei auszulesen?
momentan nutze ich filectime aber es wird leider das datum ausgelesen, an welchem ich die zugriffsrechte für diese datei geändert habe.
merkwürdige sache. im ftp programm werden die wirklichen daten angezeigt wann die datei hochgeladen wurde. mit dem php command wird aber das datum angezeigt, als ich die zugriffsrechte geändert habe.
gruß
steff
Zitatmomentan nutze ich filectime aber es wird leider das datum ausgelesen, an welchem ich die zugriffsrechte für diese datei geändert habe.
Und genau das soll filectime auch machen. Gibt die Zeit der letzten Änderung des Dateizeigers Inode zurück.
PHP-Doku sagt:
ZitatBei den meisten Unix Dateisystemen gilt eine Datei als geändert, sobald ihre Inode-Daten geändert wurden; d.h. wenn die Rechte, Eigentümer, Gruppe, oder andere Metadaten des Inodes aktualisiert werden
Arbeitet also völlig korrekt.
filemtime() gibt den Zeitpunkt der letzten Modifizierung der Datei zurück..
Zusätzlich sagt die PHP-Doku noch dieses :
Zitat
Beachten Sie auch, dass in einigen Unix-Texten ctime als die Zeit der Erstellung der Datei beschrieben wird. Das ist falsch. Bei den meisten Unix Dateisystemen gibt es keine Zeitangabe für die Erstellung von Unix Dateien.
mfG