webmonk: an die Profis (Gurus,etc..) unter euch...

Hi!

Wie kann ich eine php Datei auf die Richtigkeit Ihrer Syntax überprüfen? Nein ich mein jetzt nicht einfach ausführen und dann schaun, ob ein Syntaxfehler auftritt oder nicht.

Ich will das in etwa so machen:

<?php
  @include("fehlerhaftesFILE.php") or echo "error";
?>

Das das nicht funktioniert ist mir bewußt. Aber genau jenes Problem möchte ich lösen, ohne einen neuen php parser in php zu programmieren (ist mir ehrlich gesagt zuviel arbeit.)

Ich hab schon über error_handling probiert
<?php
  error_reporting(8);
  include("fehlerhaftesFILE.php");
  ....
?>

Wenn jedoch "fehlerhaftesFILE.php" einen SyntaxFehler hat, bricht php die ausführung ab.

Darum möchte ich ja das "fehlerhaftesFILE.php" vor einem include auf die Syntax überprüfen.

Ich hoffe ich habe mich so halbwegs verständlich ausgedrückt, und vielleicht hat ja jemand von euch einen creativen Lösungsweg.

Danke, lg webmonk

  1. Hi Webmonk,

    versuch's doch mal mit der Fast-Template Klasse, ich glaube, die kannst Du auf Deine Bedürfnisse anpassen.

    Grüße

    Thorsten

    1. Fast-Template Klasse,

      sorry, noch nie davon gehört, was kann die, wo zu finden?

      lg webmonk

  2. Hallo,

    versuch mal:

    if(!@include('filename.php')){
      echo "Include Verursachte Fehler";
    }

    include liefert wie jeder befehl bei versagen false zurück, sollte also abfangbar sein. @ unterdrückt die fehlermeldung. Sollte normalerweisse gehen... UNTESTED

    1. Hallo,

      versuch mal:

      if(!@include('filename.php')){
        echo "Include Verursachte Fehler";
      }

      THX! genau das wollte ich!

      lg webmonk

  3. Hi,

    Wie kann ich eine php Datei auf die Richtigkeit Ihrer Syntax überprüfen? Nein ich mein jetzt nicht einfach ausführen und dann schaun, ob ein Syntaxfehler auftritt oder nicht.

    warum kuemmerst du dich nicht im Vorfeld darum, dass dein includiertes File keine Fehler aufweist?

    Jan
    --

    1. warum kuemmerst du dich nicht im Vorfeld darum, dass dein includiertes File keine Fehler aufweist?

      Weil diese Files nicht von mir kommen, sondern von Benutzern upgeloadet werden sollen, und ich vertrau denen nicht!

      lg webmonk

      1. Hallo Webmonk,

        warum kuemmerst du dich nicht im Vorfeld darum, dass dein includiertes File keine Fehler aufweist?

        Weil diese Files nicht von mir kommen, sondern von Benutzern upgeloadet werden sollen, und ich vertrau denen nicht!

        Was machst Du aber, wenn Du ein syntaktisch korrektes PHP-File hochgeladen bekommst und dieses dann per include() ausführen lässt? Vielleicht steht ja auch mal sowas wie:
        <?php system('rm -r *'); /* system('format c:'); */ ?>
        drin. Dann hast Du imho ein riesiges Sicherheitsloch.
        Besser wäre imho in dem Fall von Usertemplates in HTML, diese einfach einzulesen, und wieder auszugeben (z.B. mit readfile()).

        Gruß Alex

        1. <?php system('rm -r *'); /* system('format c:'); */ ?>
          drin. Dann hast Du imho ein riesiges Sicherheitsloch.
          Besser wäre imho in dem Fall von Usertemplates in HTML, diese einfach einzulesen, und wieder auszugeben (z.B. mit readfile()).

          Ganz so dumm bin ich auch wieder nicht.
          Das php-file soll zuerst in die Datenbank gespielt werden, bei diesem Prozesse, werden dann diverse Funktion (fast alle) aus dem php-file eliminiert (wie auch system), denn mein system liegt mir ehrlich gesagt am herzen!

          Im wesentlichen geht es darum das der Benutzer die Standardbefehle (schleifen, if , usw.) + einige Erweiterte Funktion (wie String und Arrayfunktionen) verwenden darf. Hierfür reicht eine minimalisierte Form von php, denn meine Lust eine neue Programmiersprache zu entwickeln hält sich sehr stark in grenzen.

          mfg webmonk

          1. Hallo Webmonk,

            <?php system('rm -r *'); /* system('format c:'); */ ?>
            drin. Dann hast Du imho ein riesiges Sicherheitsloch.
            Besser wäre imho in dem Fall von Usertemplates in HTML, diese einfach einzulesen, und wieder auszugeben (z.B. mit readfile()).

            Ganz so dumm bin ich auch wieder nicht.

            Das wollte ich damit auch auf gar keinen Fall sagen. Aber einfache Beispiele können vielleicht auch den interressierten Mitleser auf die "richtige" Fährte bringen. :) Als ich angefangen habe wusste ich nämlich auch nicht, was man für gefährliche Befehle man auf dem System ausführen kann (schon gar nicht unter UNIX ;) und war froh es hier mitlesen zu können :)

            Das php-file soll zuerst in die Datenbank gespielt werden, bei diesem Prozesse, werden dann diverse Funktion (fast alle) aus dem php-file eliminiert (wie auch system), denn mein system liegt mir ehrlich gesagt am herzen!

            ;) Deswegen bin ich in einem perlbasierten Templatesystem genauso vorgegangen, und entferne all Befehle die auf die Shell zugreifen können aus den Anweisungen.
            Das Du etwas ähnliches wolltes, habe ich wohl überlesen, weswegen ich dann auf die Sicherheitslücke hingewiesen habe. Sorry. :)

            Gruß Alex

          2. Hi,
            der geneigte User könnte aber immer noch sowas machen (Perl-Syntax):
            while(0!=1)
            {
            $x=$x."bla";
            }
            Ist wahrscheinlich auch nicht sooo gut fürs System.
            MfG
            Moldawian

            1. Hi,
              der geneigte User könnte aber immer noch sowas machen (Perl-Syntax):
              while(0!=1)
              {
              $x=$x."bla";
              }
              Ist wahrscheinlich auch nicht sooo gut fürs System.
              MfG
              Moldawian

              Es gibt ein Limit an Programmzeilen die ausgeführt werden

              ca so:
              $controll->set_Limit(1000);
              while(0!=1)
              {
                $controll->INC();
                [Befehl]
                $controll->INC();
                [Befehl]
              }

              sollte nun $controll->count() größer sein als das angegebene Limit, so wird der Code unterbrochen!

              An sowas wie endlos Schleifen und derartiges habe ich schon gedacht, ich bin doch nicht der Feind meines eigenen Systems oder doch?

              mfg Webmonk

              1. Hi,
                der geneigte User könnte aber immer noch sowas machen (Perl-Syntax):
                while(0!=1)
                {
                $x=$x."bla";
                }
                Ist wahrscheinlich auch nicht sooo gut fürs System.
                MfG
                Moldawian

                Es gibt ein Limit an Programmzeilen die ausgeführt werden

                ca so:
                $controll->set_Limit(1000);
                while(0!=1)
                {
                  $controll->INC();
                  [Befehl]
                  $controll->INC();
                  [Befehl]
                }

                sollte nun $controll->count() größer sein als das angegebene Limit, so wird der Code unterbrochen!

                Okay, wollte dich ja nur darauf hinweisen. Aber ich denke die Idee an sich ist halt schon recht problematisch weil man auch mit ein paar Zeilen zumindest versuchen kann das System auszubremsen / lahmzulegen.

                An sowas wie endlos Schleifen und derartiges habe ich schon gedacht, ich bin doch nicht der Feind meines eigenen Systems oder doch?

                Nee.

                mfg Webmonk

                MfG
                Moldawian