Tom123: Ausführen eingebundener Datei verhindern.

Guten Morgen,
wie kann man das Ausführen einer eingebundenen Datei verhindern. In meinem Projekt wird eine Datei eingebunden, die unter Umständen nicht Lauffähig ist. Das kann jedoch nur in der eingebundenen Datei festgestellt werden. Ist die Datei nicht lauffähig, so möchte ich die Ausführung verhindern damit Ouput und Meldungen aus dieser Datei vermieden werden.

die(), exit() usw. berechen das ganze Skript ab, was vermieden werden soll. Eine if-Anweisung scheidet leider auch aus, weil die inkludierte Datei mit Text endet und nicht mit PHP-Code. Die Homepage soll praktisch trotz defekter Datei ausführbar sein.

Grüße
Tom123

  1. Sup!

    Tja keine Ahnung. Vielleicht kann man PHP die einzelne PHP-Datei ausführen und das Ergebnis in eine Variable speichern lassen, und, wenn die Datei nicht auführbar war, die Datei nochmal öffnen und den Text vom Dateiende rausparsen und ausgeben?

    Die offensichtlich bessere Lösung wäre natürlich, zu verhindern, dass nicht-ausführbare Dateien herumliegen können.

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
    1. Der Code in der Datei würde auf keinen Fall sichtbar, weil er schon geparst ist und als binary vorliegt. Die Datei endet quasi mit dem binary-Code, der sich leider nicht in einer Variable aufnehmen lässst.

  2. Lieber Tom123,

    ich verstehe zwar Dein Problem nur zu einem Teil, frage mich aber, warum eine if-Anweisung ausscheiden sollte.

    Eine if-Anweisung scheidet leider auch aus, weil die inkludierte Datei mit Text endet und nicht mit PHP-Code.

    Man kann ja den Text mit PHP-"Tags" umschließen. Etwa so

    <?php if ($bedingung) { ?> ... Text ... <?php } else { ?> ... Text2 ... <?php } ?>

    Schön ist zwar etwas ganz anderes, aber es könnte Dein Problem vielleicht doch mit einer if-Anweisung lösen.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hi Felix,
      das geht auch nicht, weil ich nur Code am Dateianfang einfügen kann. Danach folgt Output, den ich nicht mehr beeinflussen kann (Ähnlich wie beim setzten eines Headers). Deswegen kann ich die schließende Klammer nicht mehr anbringen und das für zu einem Fehler.

  3. die(), exit() usw. berechen das ganze Skript ab, was vermieden werden soll. Eine if-Anweisung scheidet leider auch aus, weil die inkludierte Datei mit Text endet und nicht mit PHP-Code. Die Homepage soll praktisch trotz defekter Datei ausführbar sein.

    Hi,
    du kannst mit "return False;" (order irgendeinem anderen Rückgabewert) jederzeit aus einem includierten Skript zurück ins Haupt-Skript springen.

    Gruß,
    Andreas

    1. Hi Andreas,
      danke, das geht. Manchmal sind die einfachsten Sachen die schwersten ;) Danke.

      Gruß
      Tom123

      1. Hi,

        du kannst mit "return False;" (order irgendeinem anderen Rückgabewert) jederzeit aus einem includierten Skript zurück ins Haupt-Skript springen.

        danke, das geht.

        Dann meintest du also mit "nicht lauffaehig" also nicht, dass diese Datei bswp. fehlerhaften Code enthalten kann, sondern lediglich, dass ihr entweder die noetigen Eingabewerte vorliegen, um ihre eigenen Berechnungen o.ae. durchzufuehren, oder eben nicht ...?

        Waere hilfreich, wenn du sowas naechstes mal gleich etwas klarer formulierst.

        MfG ChrisB

  4. Guten Morgen,

    beim Apachen mache ich das entweder so, dass ich diese Dateien alle in ein Verzeichnis lege, das .ht_includes heißt - auf das .ht kommt es an, das wird bei Standard-Einstellung des Apachen nicht ausgeliefert - oder ich nenne die Dateien selber .ht_functions.inc usw.

    Außerdem war hier die letzten Tage noch ein Thread, der nach einer zusätzlichen php.ini fragte. Da wurde auch schon diskutiert, wie man die gegen Auslieferung über HTTP schützen kann: <files>-Direktive des Apachen.

    LG
    Chris©

  5. Guten Morgen,

    ok, noch ein zweiter Anlauf.
    Hab Dich wohl beim ersten Lesen nicht gleich verstanden.

    Du willst die Datei also auf jeden Fall einbinden, aber nur dann laufen lassen, wenn sie augenscheinlich keine Fehler produziert.

    Ich habe das zwar selber noch nicht ausprobiert, aber mir fallen spontan einige Ideen ein:

    • die Ausgaben mit ob_start() abfangen und nur dann ausgeben, wenn $php_errormsg leer bliebt
    • einen Errorhandler setzen
    • mit Try - Catch arbeiten

    Ich finde das spannend, was rauskommen wird.

    LG
    Chris©