pragmaMx Support Forum

alles für Webmaster => PhP & mySQL => Thema gestartet von: Musicman75 in 27 Juni 2006, 00:06:00

Titel: Ordner auslesen und sortiert ausgeben
Beitrag von: Musicman75 in 27 Juni 2006, 00:06:00
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.
Titel: Re: Ordner auslesen und sortiert ausgeben
Beitrag von: Andi in 27 Juni 2006, 00:55:31
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);
}

Titel: Re: Ordner auslesen und sortiert ausgeben
Beitrag von: Musicman75 in 27 Juni 2006, 22:37:14
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
Titel: Re: Ordner auslesen und sortiert ausgeben
Beitrag von: Musicman75 in 28 Juni 2006, 21:57:47
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.
Titel: Re: Ordner auslesen und sortiert ausgeben
Beitrag von: Andi in 28 Juni 2006, 22:52:50
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.
Titel: Re: Ordner auslesen und sortiert ausgeben
Beitrag von: Musicman75 in 28 Juni 2006, 23:06:17
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);
}
?>
Titel: Re: Ordner auslesen und sortiert ausgeben
Beitrag von: Musicman75 in 30 Juni 2006, 00:36:20
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
Titel: Re: Ordner auslesen und sortiert ausgeben
Beitrag von: jubilee in 05 Juli 2006, 19:47:55
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