Ordner auslesen und sortiert ausgeben

Begonnen von Musicman75, 27 Juni 2006, 00:06:00

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Musicman75

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.
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

Andi

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);
}

schön´s Grüssle, Andi

Musicman75

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
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

Musicman75

#3
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.
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

Andi

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.
schön´s Grüssle, Andi

Musicman75

So sieht jetzt der phpteil aus:
<?php
function Dateigroesse($URL)
{
    
$Groesse filesize($URL);
    if(
$Groesse 1000)
    {
        return 
number_format($Groesse0","".")." Bytes";
    }
    elseif(
$Groesse 1000000)
    {
        return 
number_format($Groesse/10240","".")." kB";
    }
    else
    {
        return 
number_format($Groesse/10485760","".")." 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);
}
?>
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

Musicman75

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
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

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