Jochen Heinemann: Warum funktioniert dieser Script nicht?

Hallo,

ich habe aus der Newsgroup fogendes Script genommen, was aber bei mir nicht wirklich läuft:

http://www.php-faq.de/q/q-code-verzeichnis.html

Kann mir mal jemand das Script erklären, vielleicht komme ich so darauf, warum es bei mir nicht funktioniert.

Viele Grüße
Jochen Heinemann

  1. hallo,

    ich habe aus der Newsgroup fogendes Script genommen, was aber bei mir nicht wirklich läuft:
    http://www.php-faq.de/q/q-code-verzeichnis.html

    "nicht wirklich läuft" ist eine sehr ungenaue Fehlerbeschreibung. Schau dir mal die Variablen in dem Script an und überlege dir, welche du davon noch mit einem Wert füllen müßtest.

    Grüße aus Berlin

    Christoph S.

    1. icht wirklich läuft" ist eine sehr ungenaue Fehlerbeschreibung. Schau dir mal die Variablen in dem Script an und überlege dir, welche du davon noch mit einem Wert füllen müßtest.

      Ja, geb Dir Recht, ist ne ungenaue Angabe. Deshalb habe ich es weiter oben nochmal genauer beschrieben.
      Und, ich soll Variablen füllen? Ist wahr? Bitte um einen Tip.
      grüße
      Jochen Heinemann

  2. Moin,

    Kann mir mal jemand das Script erklären, vielleicht komme ich so darauf, warum es bei mir nicht funktioniert.

    nimm mal alle '@' aus dem Script raus und schaue Dir die Fehlermeldungen an.

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
    1. Moin,

      Kann mir mal jemand das Script erklären, vielleicht komme ich so darauf, warum es bei mir nicht funktioniert.

      nimm mal alle '@' aus dem Script raus und schaue Dir die Fehlermeldungen an.

      Hallo mike,

      hm, hab ich nun gemacht. Die Ausgabe ohne alle @ ist exact dieselbe, wie mit den @.
      Was muß mir das nun sagen?
      Grüße an Dich
      Jochen Heinemann

      regds
      Mike©

      1. Ahoi Jochen Heinemann,

        hm, hab ich nun gemacht. Die Ausgabe ohne alle @ ist exact dieselbe, wie mit den @.

        error reporting auch auf e_all?

        MfG

        --
        Alle Angaben wie immer ohne Gewähr
  3. Kann mir mal jemand das Script erklären, vielleicht komme ich so darauf, warum es bei mir nicht funktioniert.

    Welche Teile des Scripts sind denn unverständlich? "Rekursiv" ist klar?

    while ($file = @readdir ($handle) !== false)
    Schleife durch alles in dem Verzeichnis. Es gibt drei Fälle:

    1. if (preg_match("=^.{1,2}$=", $file))
    Es gibt die Dateien "." (aktuelles Verzeichnis) und ".." (Nach oben), die werden hier übersprungen

    2. if(is_dir($dir.$file))
    Wenns ein Verzeichnis ist, rekursiv Dieses anzeigen!

    3. else
    Es ist eine Datei, anzeigen!

    1. Kann mir mal jemand das Script erklären, vielleicht komme ich so darauf, warum es bei mir nicht funktioniert.

      Welche Teile des Scripts sind denn unverständlich? "Rekursiv" ist klar?

      Jaja, weiß ich, was heißt.

      while ($file = @readdir ($handle) !== false)
      Schleife durch alles in dem Verzeichnis. Es gibt drei Fälle:

      Ok.

      1. if (preg_match("=^.{1,2}$=", $file))
        Es gibt die Dateien "." (aktuelles Verzeichnis) und ".." (Nach oben), die werden hier übersprungen

      Ok, hab ich auch so erkannt.

      1. if(is_dir($dir.$file))
        Wenns ein Verzeichnis ist, rekursiv Dieses anzeigen!

      auch soweit klar.

      1. else
        Es ist eine Datei, anzeigen!

      Und genau das funktioniert eben nicht...

      Angezeigt wird |-1
                     |-1
                     |-1 usw.

      "Findet die Funktion ein Verzeichnis, dann wird der Verzeichnisname fett ausgegeben und die Funktion ruft sich mit dem Unterverzeichnis als Parameter selbst wieder auf."

      Eben das funktioniert auch nicht :-(

      Nochmal Grüße und ersten Dank für Eure Hilfe
      Jochen Heinemann

      P.S: Achso, unter show_dir("special/"); habe ich show_dir("./"); eingetragen.

      1. Hi,

        1. if (preg_match("=^.{1,2}$=", $file))
          Es gibt die Dateien "." (aktuelles Verzeichnis) und ".." (Nach oben), die werden hier übersprungen

        Wirklich?
        Ich behaupte, daß damit alle Dateien, deren Namen aus einem oder zwei beliebigen Zeichen bestehen, übersprungen werden.

        Begründung:
        Innerhalb von "" wird \ auf PHP-Ebene als Escape benutzt.
        . hat keine Spezialbedeutung (so wie \n, \t usw. es hätten), wird also durch . ersetzt.
        Bei der Regex-Maschine kommt also
        ^.{1,2}$
        an - sprich: ein oder zwei beliebige Zeichen.

        Wenn nur Punkte gemeint sein sollen, müßte es m.E. "=^\.{1,2}$=" heißen,
        damit bei der Regex-Maschine noch
        ^.{1,2}$
        ankommt.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hallo Andreas,

          1. if (preg_match("=^.{1,2}$=", $file))
            Es gibt die Dateien "." (aktuelles Verzeichnis) und ".." (Nach oben), die werden hier übersprungen
            Wirklich?

          ja. Der Code:

          if(preg_match("=^\.{1,2}$=", 'aa')){  
              echo 'foo';  
          }  
          else{  
              echo 'bar';  
          }
          

          gibt "bar" aus.

          . hat keine Spezialbedeutung (so wie \n, \t usw. es hätten), wird also durch . ersetzt.

          nein, deswegen bleibt es .

          Grüße aus Nürnberg
          Tobias

          1. Hi,

            1. if (preg_match("=^.{1,2}$=", $file))
              Es gibt die Dateien "." (aktuelles Verzeichnis) und ".." (Nach oben), die werden hier übersprungen
              Wirklich?
              ja.
              . hat keine Spezialbedeutung (so wie \n, \t usw. es hätten), wird also durch . ersetzt.
              nein, deswegen bleibt es .

            Wah. PHP ist krank.

            C und C++ und Javascript und Pascal und Perl und ... machen aus . einen .
            Java verweigert das Kompilieren (illegal escape character).

            Nur PHP macht daraus .

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Schreinerei Waechter
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  4. Hallo,

    ich habe aus der Newsgroup fogendes Script genommen, was aber bei mir nicht wirklich läuft:

    http://www.php-faq.de/q/q-code-verzeichnis.html

    Hi All,

    schade. Ich hätte gerne diesen Script verstanden und eingesetzt. Leider habe ich nicht die Zeit, über Tage hinweg nach dem Grund zu suchen, warum das Teil bei mir nicht läuft.
    Eure Hinweise habe ich ausprobiert, geändert oder gebracht hat es leider bei mir nichts und der (für mich) entscheidende Hinweis war leider einfach nicht dabei :-(
    Also werde ich mir (wohl oder übel) ein anderen Script suchen oder zusammenbasteln müssen, daß mir weiterhilft.
    Danke trotzdem an alle für die Mühe bei der Hilfe.
    Jochen Heinamann

  5. echo $begrüßung;

    [...] warum es [...] nicht funktioniert.

    Der Fehler ist eine nicht beachtete Operatoren-Rangfolge in dieser Zeile:

    while ($file = readdir($handle) !== false) {

    Klammert man die Zuweisung, geht es.

    while (($file = readdir($handle)) !== false) {

    echo "$verabschiedung $name";

    1. WoW! Super $Name!
      äVielen herzlichen Dank für Deine Hilfe!
      Und ganz ehrlich, auch im Sinne von SELFHTML bringt es mir 1000 mal mehr, jetzt einfach zu wissen, was am Script, das ja nun 1000fach veröffentlicht ist, falsch war!
      Jetzt wird endlich ein Schuh draus.
      Nochmal vielen, vielen Dank...endlich komme ich weiter!
      Jochen Heinemann

      echo $begrüßung;

      [...] warum es [...] nicht funktioniert.

      Der Fehler ist eine nicht beachtete Operatoren-Rangfolge in dieser Zeile:

      while ($file = readdir($handle) !== false) {

      Klammert man die Zuweisung, geht es.

      while (($file = readdir($handle)) !== false) {

      echo "$verabschiedung $name";