Steffen: Statistik für Fotogalerie

Hallo,

Als Einstieg in unsere Fotogalerie möchte ich ausgeben, wieviele Ordner mit wievielen Bildern insgesamt zur Verfügung stehen.

Hierzu habe ich Im Internet ein tolles Script gefunden, das Verzeichnisse samt Unterverzeichnisse einliest.

Die Abwandlung - ich benötige ja nur das Hochzählen zweier Variablen - sieht so aus:

<?php

$AnzahlVerzeichnisse = 0;
  $AnzahlBilder        = 0;

function show_dir ($dir)
  {
    global $AnzahlVerzeichnisse;
    global $AnzahlBilder;

$handle = @opendir ($dir);

while ($file = @readdir ($handle))
    {
      if (eregi ("^.{1,2}$", $file))
        continue;

if (is_dir ($dir.$file))
      {
        $AnzahlVerzeichnisse += 1;
        show_dir ($dir.$file."/");
      }
      else
        $AnzahlBilder += 1;
    }

@closedir ($handle);
  }

show_dir (" [PFAD] ");

if ($AnzahlVerzeichnisse == 0)
    $AusgabeAnzahlVerzeichnisse = "Es stehen noch keine Ordner zur Verfügung";
  else
  {
    if ($AnzahlVerzeichnisse == 1)
    {
      if ($AnzahlBilder == 0)
        $AusgabeAnzahlVerzeichnisse = "Aktuell wurde nur 1 Ordner ohne Bilder angelegt";
      else
      {
        if ($AnzahlBilder == 1)
          $AusgabeAnzahlVerzeichnisse = "Aktuell steht 1 Ordner mit 1 Bild zur Verfügung";
        else
          $AusgabeAnzahlVerzeichnisse = "Aktuell steht 1 Ordner mit " . $AnzahlBilder . " zur Verfügung";
      }
    }
    else
    {
      if ($AnzahlBilder == 0)
        $AusgabeAnzahlVerzeichnisse = "Aktuell stehen nur " . $AnzahlVerzeichnisse . " ohne Bilder zur Verfügung";
      else
      {
        if ($AnzahlBilder == 1)
          $AusgabeAnzahlVerzeichnisse = "Aktuell stehen " . $AnzahlVerzeichnisse . " mit insgesamt 1 Bild zur Verfügung";
        else
          $AusgabeAnzahlVerzeichnisse = "Aktuell stehen " . $AnzahlVerzeichnisse . " mit insgesamt " . $AnzahlBilder . " zur Verfügung";
      }
    }
  }

?>

Allerdings wird mir nichts am Bildschirm angezeigt.

Ich habe die Vermutung, dass die Variablen innerhalb der Funktion zwar gefüllt, ausserhalb der Funktion aber nicht zur Verfügung stehen.

Dass ich Funktionen mit avriablen Parametern aufrufen kann, weiss nicht, nur wie - und das wäre wohl die Lösung - kann ich eine variable Rückgabenliste weiterverarbeiten ?

Oder gibt es da noch eine andere Lösungsmöglichkeit ?

Gruss, Steffen

  1. Hallo,

    function show_dir ($dir)
      {
        global $AnzahlVerzeichnisse;
        global $AnzahlBilder;

    global sollte man vermeiden (hat aber nix mit deinem Problem zu tun).

    show_dir (" [PFAD] ");

    ^^^^^^^^^^
    Was soll das? Probier's mal mit einem "richtigen" Pfad.

    Grüsse
    Frankie

    1. Hallo Frankie,

      show_dir (" [PFAD] ");
      Was soll das? Probier's mal mit einem "richtigen" Pfad

      Ich habe diese Angabe nur als Platzhalter eingefügt. Das Auslesen mit einer richtigen Pfad-Angabe funktioniert auch einwandfrei, nur die Ausgabe will nicht.

      Gruss, Steffen

      1. Huhu Steffen

        ... nur die Ausgabe will nicht.

        Mmmmh, dann prüfe doch mal die Code-Stelle welche für die Ausgabe zuständig ist.

        Diese hast Du

        a) nicht gepostet

        b) schlicht vergessen

        Dein Lösungsansatz mit den verschachtelten ifs ist sehr unübersichtlich.
        Das kann man bestimmt eleganter lösen.

        Vor allem gewöhn Dir an _immer_ geschweifte Klammern um die Anweisungsblöcke zu setzen.
        Auch wenn sie ggf. optional sind.

        Gar nicht lange darüber nachdenken, "mmmh ist doch nur ein Einzeiler da muss man doch gar nicht ... " - einfach hinschreiben und gut ist.

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
      2. Hallo Steffen,

        show_dir (" [PFAD] ");
        Ich habe diese Angabe nur als Platzhalter eingefügt. Das Auslesen mit einer richtigen Pfad-Angabe funktioniert auch einwandfrei, nur die Ausgabe will nicht.

        generell finde ich deinen Code "grausam" zu lesen, da bei den if-then-else-Statements für meinen Geschmack zu wenige {Klammern} vorhanden sind. Ist deshalb zwar nicht unbedingt falsch, aber eben schlecht lesbar.

        Ungetestet:

        $AnzahlVerzeichnisse = 0;
        $AnzahlBilder        = 0;

        ersatzlos streichen

        function show_dir ($dir)
        {

        global $AnzahlVerzeichnisse;
            global $AnzahlBilder;

        ersatzlos streichen

        $handle = @opendir ($dir);

        »

        while ($file = @readdir ($handle))
           {
             if (eregi ("^.{1,2}$", $file))
               continue;

        »

        if (is_dir ($dir.$file))
             {
               $AnzahlVerzeichnisse += 1;
               show_dir ($dir.$file."/");
             }
             else
               $AnzahlBilder += 1;
           }
           @closedir ($handle);

        $arr['anz_files'] = $AnzahlVerzeichnisse;
        $arr['anz_img'] = $AnzahlBilder;

        return $arr;

        }

        show_dir (" [PFAD] ");

        $AnzahlVerzeichnisse = $arr['anz_files'];
        $AnzahlBilder= $arr['anz_img']

        if ($AnzahlVerzeichnisse == 0)

        ... weiter wie gehabt.

        Probier's mal.

        Grüsse
        Frankie

        1. Ergänzung,

          und ganz wichtig:

          Am Ende des Skripts darf ein

          echo $AusgabeAnzahlVerzeichnisse;

          nicht fehlen, sonst wird auch bei ansonten richtigem Code nix ausgegeben!

          Grüsse
          Frankie

        2. Verdammt und zugenäht,

          noch ein Fehler hat sich eingeschlichen:

          return $arr;

          }

          show_dir (" [PFAD] ");

          $arr = show_dir (" [PFAD] ");

          Grüsse
          Frankie