Problem beim auslesen und sortieren eines Ordners

compoundbow83

Grünschnabel
Hallo,
ich hab leider nicht so wirklich viel Ahnung von PHP.

Ich benutze folgendes script um einen Ordner auszulesen:

PHP:
<?php
$ordner = "./news";
$handle = opendir($ordner);
while ($file = readdir ($handle)) {
    if($file != "." && $file != "..") {
        if(is_dir($ordner."/".$file)) {
            echo "/".$file."<br/>";
        } else {
            // kompletter Pfad
            $compl = $ordner."/".$file;
            echo "<a href=\"".$compl."\">".$file."</a><br/>";
        }
    }
}
closedir($handle);
?>

Jetzt mein Problem

die Dateien sind folgender maßen aufgebaut: Gemeindeblatt_03.08.2007.pdf

jetzt möchte ich, wenn die Dateien aufgelistet werden,
dass sie nach dem Datum sortier werden, aber nein ich möchte nicht das Datumsformat der Dateien umstellen, dass müsste schon so bleiben.
Ich möchte noch, dass sie Endung der Datei nicht angezeigt wird.

Ich hoffen, mir kann da jemand helfen.
 
nur das Sortieren ...

PHP:
$datei = "Gemeindeblatt_03.08.2007.pdf";
strpos($haystack, $needle, $offset = null)
$tag = substr($datei,14,2 ); //Tag aus dem String $datei holen
$monat = substr($datei,17,2 ); //Monat aus dem String $datei holen
$jahr = substr($datei,20,2 ); //Jahr aus dem String $datei holen

$timestamp = mktime(0,0,0,$monat,$tag,$jahr); //Timestamp generieren
$gemeindeblaetter[$timestamp] = $timestamp; //in Array schreiben
sort($gemeindeblaetter); //Sortieren

print_r($gemeindeblaetter); //Array ausgeben um es zu Überprüfen
 
Hallo,
die Dateien haben aber natürliche unterschiedlichen Datums, geht des dann trotzdem?

Und wie mus ich das jetzt in das Script einbauen?
 
ok hier die lösung:

PHP:
<?php
  $ordner = "./news";

  $dp = opendir($ordner);
  $zaehler=0;
  $files = array();
  while(false !== ($file = readdir($dp)))
  {
    if (($file != "..") && ($file != "."))
    {
      $tag = substr($file,14,2 ); //Tag aus dem String $fileholen
      $monat = substr($file,17,2 ); //Monat aus dem String $file holen
      $jahr = substr($file,20,2 ); //Jahr aus dem String $file holen

      $timestamp = mktime(0,0,0,$monat,$tag,$jahr); //Timestamp generieren
      $files[$zaehler]=$timestamp;
      $zaehler++;
    }	
  }
  fclose($dp);
  sort($files); //Sortieren

  for($index=0;$index<count($files);$index++)
  {
    $datum = date(d.m.Y,$files[$index]);
    echo '<a href="'.$ordner.'/Gemeindeblatt_">Gemeindeblatt '.$datum.'</a><br/>';
  }
?>


Ich hoffe dass es jetzt so geht wie du es dir vorstellst. Die Dateinen müssen aber immer so aussehen:
Gemeineblatt_dd.mm.JJJJ.pdf

Dort wo ich dir das Auslesen des Datums in Tag, Monat und Jahr hingeschrieben habe, musst du noch überprüfen, ob die Position stimmt, also das ist so aufgebaut:

PHP:
substr($datei, (erstes Zeichen), (Anzahl der auszulesenden Zeichen)) //mit 0 wird das Zählen begonnen!

Lukas
 
Hallo, jetzt sortiert er es.

Nur hab ich jetzt noch zwei probleme:

er lässt die Punkte zwischen Tag und Monat und Monat und Jahr weg.
und wie stell ich ein, dass er mir die neuesten Datums nach oben macht?
 
Sorry eins war mein fehler, ich hab zweimal Anführungszeichen vergessen (komisch, kam keine Fehlermeldung) und dann muss te man um es anders zu sortieren sort durch rsort ersetzten .. zwei Kleinigkeiten die viel ausmachen =)

PHP:
<?php
  $ordner = "./news";

  $dp = opendir($ordner);
  $zaehler=0;
  $files = array();
  while(false !== ($file = readdir($dp)))
  {
    if (($file != "..") && ($file != "."))
    {
      $tag = substr($file,14,2 ); //Tag aus dem String $fileholen
      $monat = substr($file,17,2 ); //Monat aus dem String $file holen
      $jahr = substr($file,20,2 ); //Jahr aus dem String $file holen

      $timestamp = mktime(0,0,0,$monat,$tag,$jahr); //Timestamp generieren
      $files[$zaehler]=$timestamp;
      $zaehler++;
    }	
  }
  fclose($dp);
  rsort($files); //Sortieren

  for($index=0;$index<count($files);$index++)
  {
    $datum = date("d.m.Y",$files[$index]);
    echo '<a href="'.$ordner.'/Gemeindeblatt_">Gemeindeblatt '.$datum.'</a><br/>';
  }
?>
 
Hallo,
dank der Hilfe von kantonix hat es jetzt geklappt, hier das script:

PHP:
<?php
  $ordner = "./news";

  $dp = opendir($ordner);
  $zaehler=0;
  $files = array();
  while(false !== ($file = readdir($dp)))
  {
    if (($file != "..") && ($file != "."))
    {
      $tag = substr($file,14,2 ); //Tag aus dem String $fileholen
      $monat = substr($file,17,2 ); //Monat aus dem String $file holen
      $jahr = substr($file,20,4 ); //Jahr aus dem String $file holen

      $timestamp = mktime(0,0,0,$monat,$tag,$jahr); //Timestamp generieren
      $files[$zaehler]=$timestamp;
      $zaehler++;
    }    
  }
  fclose($dp);
  rsort($files); //Sortieren

  for($index=0;$index<count($files);$index++)
  {
    $datum = date("d.m.Y",$files[$index]);
echo '<a href="'.$ordner.'/Gemeindeblatt_'.$datum.'.pdf">Gemeindeblatt vom '.$datum.'</a><br/><br/>';
  }
?>
 
Zuletzt bearbeitet:
Zurück