Viennamade: Parse error finden

Hallo!
Ich hab eine - gemessen an meinen bescheidenen PHP-Kenntnissen - aufwändige PHP-Seite geschrieben. Sie hat bereits funktioniert - dann verschönerte ich den Code und seitdem geht nix mehr :-)
Ich bekomme im Browser diese Fehlermeldung:

Parse error: parse error, unexpected $end in e:\wamp\seite.php on line 157

157 ist die letzte Zeile der Seite, es wird eine Klammer oder ein Semikolon fehlen, denke ich.

Wenn ich jetzt brav suche werde ich den Fehler schon finden. Meine Frage ist, gibt es ein Programm, das mir die Arbeit abnimmt? Empfehlung?

  1. Hi!

    Manche HTML-Editoren haben eine Funktion, die zu allen Klammern die passende zweite sucht. Wenn du über einen entsprechendes Programm verfügst ist das zwar noch nicht der Königsweg, aber auf jeden Fall deutlich angenehmer als zehn Mal über jede Zeile Code zu fliegen, bis du das Problem findest.

    Gruß,

    Matthias

  2. Hello,

    Schau Dir doch nochmal mein Programm http://bitworks.de/~selfHTML/wordcount.php an. Das kannst Du zum Klammerzählen umbauen.

    Dann weißt Du wenigstens ganz schnell, welche Klammerart fehlt.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hallo!

      Dann weißt Du wenigstens ganz schnell, welche Klammerart fehlt.

      Stimmt!
      Danke!
      Viennamade

  3. Hallo,

    157 ist die letzte Zeile der Seite, es wird eine Klammer oder ein Semikolon fehlen, denke ich.

    Oder ein Anfuehrungszeichen. Oder...

    Vielleicht hilft es, die Anzahl "{" und "}",
    die Anzahl "(" und ")" zu vergleichen.
    Und zu schauen, ob die Anzahl doppelter und
    einfacher Anfuehrungszeichen gerade oder
    ungerade ist.

    Wenn ich jetzt brav suche werde ich den Fehler schon finden. Meine Frage ist, gibt es ein Programm, das mir die Arbeit abnimmt?

    Ich kenne kein spezielles Programm dafuer.

    Da Du offensichtlich Windows benutzt, hilft Dir das leider
    nicht weiter, aber unter Linux (KDE) gibt es den Quelltext-Editor
    "Quanta Plus".
    http://quanta.sourceforge.net/
    Der zeigt bei Klammern "{" und "(" jeweils farblich
    an, wo die dazugehoerige oeffnende/schliessende Klammer ist.
    Und auch das uebrige Syntax-Highlighting hilft oft weiter,
    z.B. bei einem mit " angefangenen String.

    Gruesse,

    Thomas

    1. Hello,

      Vielleicht hilft es, die Anzahl "{" und "}",
      die Anzahl "(" und ")" zu vergleichen.
      Und zu schauen, ob die Anzahl doppelter und
      einfacher Anfuehrungszeichen gerade oder
      ungerade ist.

      Habe gerade nochmal darüber nachgedacht. Gerade und ungerade hilft auch nicht. Die Zeichen könnten ja auch innerhalb eines Strings unpaarig stehen. Das ist ja erlaubt. Und dann dürfte man sie für die Kontrolle nicht mitzäheln. Häkchen könnten auch maskiert sein " oder ' eben. Dann dürften sie auch einzeln vorkommen.

      Wie könnte man das am Schnellsten beheben?

      1. Zeichen ausfindig machen, die nicht im Text vorkommen
      2. Alle maskierten Häkchen als erstes austauschen gegen Zeichen,
         die nicht im Text vorkommen.
      3. Jetzt gibt es nur noch "Stringhäkchen" Stringhäkchen zählen
      4. Klammern nur dann zählen, wenn Stringhäkchen gerade paarig sind
         stimmt das? Oder gibt es einen Fall, wo eine { innerhalb eines Strings
         eine Sonderbedeutung hat?

      5. ...

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      1. Hallo,

        Habe gerade nochmal darüber nachgedacht. Gerade und ungerade hilft auch nicht. Die Zeichen könnten ja auch innerhalb eines Strings unpaarig stehen. Das ist ja erlaubt. Und dann dürfte man sie für die Kontrolle nicht mitzäheln. Häkchen könnten auch maskiert sein " oder ' eben. Dann dürften sie auch einzeln vorkommen.

        Ja, sie duerfen. Damit wird die gerade/ungerade Zaehlerei sinnlos.
        Gerade das Apostroph (') verwende ich oft als Auslassungszeichen (*).
        Damit hat es gute Chancen, unpaarig vorzukommen.
        Bei den Klammern dagegen ist es IMHO eher unwahrscheinlich,
        dass man sie einzeln hat. Auch in Text, der ausgegeben wird,
        will man ja meistens gleich viele oeffnende wie schliessende
        Klammern.
        Und wenn man mal einen besonderen Grund hat, kann man
        ja immer noch Klammern in Kommentare verpacken, damit
        der Zaehler zufrieden ist.
        Beispiel:

        echo "(Bemerkung: ...";
        if ($bedingung)
          echo "... Bemerkung Ende 1)";
        else
          echo "... Bemerkung Ende 2)";

        Hier haette man ja eine oeffnende, aber zwei schliessende
        runde Klammern.
        Abhilfe:

        echo "(Bemerkung: ..."; // Zusatz-Klammer fuer den Zaehler: (
        if ($bedingung)
          echo "... Bemerkung Ende 1)";
        else
          echo "... Bemerkung Ende 2)";

        Sauberer - aber eben eine Zeile laenger - waere natuerlich:
        echo "(Bemerkung: ...";
        if ($bedingung)
          echo "... Bemerkung Ende 1";
        else
          echo "... Bemerkung Ende 2";
        echo ")";

        Oder gibt es einen Fall, wo eine { innerhalb eines Strings eine Sonderbedeutung hat?

        Ja.

        Lies doch wieder mal
        http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing
        :-)

        $beer = 'Heineken';
        echo "He drank some {$beer}s"; // funktioniert
        echo "He drank some $beers";   // funktioniert nicht, $beers ist undefiniert.

        Gruesse,

        Thomas

        (*) Nein, fuer den Genitiv verwende ich das Apostroph nicht.
        Jedenfalls nicht so: http://members.aol.com/apostrophs/ .
        Hoechstens nach meinem Namen und anderen Woertern, die
        auf "S" enden - also dort, wo es schon immer korrekt war.
        Die Rechtschreibe-Reform boykottiere ich nach wie vor, so gut
        ich kann, auch wenn die Manipulation durch die Medien
        sehr hartnaeckig ist, z.B. "aufwendig" muss ich schon bewusst
        so schreiben.

        1. Hello,

          http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing

          :-)

          Ja, daran dachte ich.

          $beer = 'Heineken';
          echo "He drank some {$beer}s"; // funktioniert
          echo "He drank some $beers";   // funktioniert nicht, $beers ist undefiniert.

          darf man denn dan die geschweifte Klammer überhaupt im String verwenden als normales Zeichen, oder muss die in PHP dann auch maskiert werden? Dann wär's ja das Gleiche (nicht dasselbe), wie mit den Häkchen.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          1. Hallo,

            darf man denn dan die geschweifte Klammer überhaupt im String verwenden als normales Zeichen, oder muss die in PHP dann auch maskiert werden? Dann wär's ja das Gleiche (nicht dasselbe), wie mit den Häkchen.

            Soweit ich
            [http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex]
            verstehe, kann man die geschweiften Klammern ohne weiteres
            in Strings (auch mit doppelten Anfuehrungszeichen) verwenden.
            Wenn gleich vor oder nach der oeffnenden Klammer { ein
            Dollarzeichen $ kommt, dann wird die "curly (complex) syntax"
            angewendet, ansonsten verhaelt sich die geschweifte Klammer
            voellig normal.
            Wenn man z.B. eine Variable $bla mit dem Wert 15 hat, und
            {$bla hat den Wert 15} _ausgeben_ will, muss man einfach schreiben:
            echo "{$bla hat den Wert $bla}";

            Gruesse,

            Thomas

            1. Hello,

              Soweit ich
              [http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex]

              Wenn man z.B. eine Variable $bla mit dem Wert 15 hat, und
              {$bla hat den Wert 15} _ausgeben_ will, muss man einfach schreiben:
              echo "{$bla hat den Wert $bla}";

              Und damit wären die leicht verständlichen Verfahren am Ende. Die Idee kann ich also von meiner Liste der interessanten Musterscripte streichen. Denn zwischen der { und dem $ dürfen auch noch beliebig viele Leerzeichen sein. Das geht dann wieder am besten mit preg_replace() & Co.

              Ist dann zu schwer als Beispiel.

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  4. Hallo Viennamade,

    Wenn ich jetzt brav suche werde ich den Fehler schon finden. Meine Frage ist, gibt es ein Programm, das mir die Arbeit abnimmt? Empfehlung?

    ich glaube http://www.phpedit.net konnte ebenfalls nicht geschlossene Klammern bemängeln und farblich hervorheben. Bin mir aber nicht mehr ganz sicher ob es das Programm war.

    Die Version, die ich installiert hatte war _sehr_ Beta, deswegen habe ich sie nicht mehr installiert ... vielleicht hast Du mehr Glück :-)

    Gruß,
    small-step