Rafael: Probeparsen?

Hallo,
gibt es in PHP eine Möglichkeit eine Datei probe zu parsen?
Es geht darum, dass ich einem Nutzer ermöglichen will in eine Anwendung eigene Funktionen einzubinden. Dies soll aber nur geschehen wenn ein gültiges PHP-Dokument vorliegt, das den Parser nicht wegen eines Fehlers abbrechen würde.

Wenn es soetwas gibt: Cashet PHP das Dokument oder muss es zweimal geparset werden?

Danke für Tipps!

  1. gudn tach!

    gibt es in PHP eine Möglichkeit eine Datei probe zu parsen?

    weiss ich nicht, aber es gibt zumindest die moeglichkeit, die syntax zu checken:
    http://php.net/php_check_syntax

    prost
    seth

    1. Leider nicht...
      "Anmerkung: For technical reasons, this function is deprecated and removed from PHP. Instead, use php -l somefile.php from the commandline."

      Ein exec halte ich aber auch nicht für die beste Lösung, da ich um meinen Parser fürchte :(

      1. Heyho!

        Ein exec halte ich aber auch nicht für die beste Lösung, da ich um meinen Parser fürchte :(

        Das finde ich niedlich. Du fuerchtest um deinen Parser aber laesst die Leute beliebig (Schad)code schreiben? Wenn Du ne Frau waerst haetteste jetzt wieder n Niedlichkeitspunkt bei mir eingesammelt. So nur nen Sympathiepunkt. :)

        Erklaer doch mal dein Projekt etwas genauer. Ich mein, wenn Du nen CMS schreibst wo der User sowas koennen soll, machts ja noch Sinn, aber sonst?...

        1. Erklaer doch mal dein Projekt etwas genauer. Ich mein, wenn Du nen CMS schreibst wo der User sowas koennen soll, machts ja noch Sinn, aber sonst?...

          Es ist kein CMS, aber trotzdem ein Entwicklertool. Daher möchte ich eine möglichst einfache Gelegenheit geben Code einzufügen. Damit dieser aber auch sicher funktioniert (das Tool verwaltet sich in seinem eigenen Framework) und mit einer fehlerhaften Einfügung nicht eben dieses zerschossen wird, was dann manuelles Löschen der hochgeladenen Datei erfordern würde, was wiederrum mein Ziel der Bedienbarkeit bei völliger Unkenntniss zerstören würde (Ja, es ist auch sinnvoll diesen Fremdcode auf jeder Seite einzufügen.) möchte ich eben erst mal sehen, ob der Code auch geladen werden soll.

          Grüße,
          Rafael

          1. :D

            Es ist kein CMS, aber trotzdem ein Entwicklertool. Daher möchte ich eine möglichst einfache Gelegenheit geben Code einzufügen. Damit dieser aber auch sicher funktioniert (das Tool verwaltet sich in seinem eigenen Framework) und mit einer fehlerhaften Einfügung nicht eben dieses zerschossen wird, was dann manuelles Löschen der hochgeladenen Datei erfordern würde, was wiederrum mein Ziel der Bedienbarkeit bei völliger Unkenntniss zerstören würde (Ja, es ist auch sinnvoll diesen Fremdcode auf jeder Seite einzufügen.) möchte ich eben erst mal sehen, ob der Code auch geladen werden soll.

            Das ist zwar ein unglaublich langer Satz, aber ich versteh's komischerweise trotzdem!

  2. Hallo Rafael,

    wie willst Du verhindern, dass der User Scripts schreibt, die

    • Dateien löschen
    • Daten ausspähen
    • Spammails versenden
    • Datenbanken dumpen
    • sich selbst Adminrechte geben
    • Auf der Servershell arbeiten?

    Gruß
    Olaf

    1. hi,

      wie willst Du verhindern, dass der User Scripts schreibt, die

      • Dateien löschen
      • Daten ausspähen
      • Spammails versenden
      • Datenbanken dumpen
      • sich selbst Adminrechte geben
      • Auf der Servershell arbeiten?

      Ansatzweise: disable_functions

      Aber darauf verlassen würde ich mich auch eher ungern.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
    2. Wenn er das will...

      Nicht die Skripte kommen auf meinen Server, sondern mein Framework (wenn er will) auf seinen.
      Grüße.

  3. Hello,

    gibt es in PHP eine Möglichkeit eine Datei probe zu parsen?

    Ich denke, mit eval() müsste das gehen.
    Die in anderen Postings erwähnten Veränderungen müsstest Du dann natürlich in kauf nehmen, wenn ich das Konzept richtig verstehe...

    eval() bricht allerdings das Script mit exit ab bei einem schweren Fehler.

    Eine andere Möglichkeit wäre eventuell

    http://www.php.net/manual/en/function.call-user-func.php

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hello,

      ich hatte gerade noch eine Idee dazu, aber leider steht definitiv drin, dass E_PARSE nicht abgefangen werden kann.

      http://www.php.net/manual/en/function.set-error-handler.php

      ist aber trotzdem lesenswert. Vielleicht kommst Du dadurch noch auf eine andere Idee.

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau