Ankündigung

Einklappen
Keine Ankündigung bisher.

Datei einlesen - ausgeben + php code ausführen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datei einlesen - ausgeben + php code ausführen

    Hallo!

    Ich lese eine Datei in ein Array ein, dann wird Zeile für Zeile mit echo ausgegeben. Das Problem ist, wenn in der Datei PHP-Code ist, wird dieser nicht ausgeführt. Wie kann ich das Problem beheben?

    Code:
    $datei = file($_GET['rslt']);
    foreach($datei as $zeilen){
    $zeilen = preg_replace("/((<[^>]*)|$kw)/ie", '"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"', $zeilen);
    echo $zeilen;
    }
    }

  • #2
    Nein, das ist kein Problem. Andersrum wäre es ein Problem. Stell dir vor, jede Datei, die du einliest, würde automatisch ausgeführt werden. Es gäbe keine Upload-Skripte im Netz!

    Möglichkeiten wären:
    Datei verändert abspeichern und dann "includen". Oder erst "includen", vorher aber den output buffer anschmeipen und dann de Daten im Buffer ersetzen und ausgeben.

    Basti

    Kommentar


    • #3
      Hi!

      Das mit dem output buffer anschmeipen und dann de Daten im Buffer ersetzen verstehe ich nicht oder weis auch nicht wie man das machen kann.

      Vorher abspeichern und dann includen, finde ich etwas umständlich!

      Kann man da nichts mit eval() machen? Nur müsste ich dann prüfen, wann der PHP-Code beginnt und aufhört.

      Kommentar


      • #4
        Hi.

        Zitat von NetLook
        Das mit dem output buffer anschmeipen und dann de Daten im Buffer ersetzen verstehe ich nicht oder weis auch nicht wie man das machen kann.
        Hast du überhaupt nachgelesen oder was genau verstehst du nicht?

        http://de.php.net/manual/en/ref.outcontrol.php

        Vorher abspeichern und dann includen, finde ich etwas umständlich!

        Kann man da nichts mit eval() machen? Nur müsste ich dann prüfen, wann der PHP-Code beginnt und aufhört.
        So ein Test wäre viel umständlicher. Hier würde ich dann den ganzen Code durch eval() jagen. Also gleich file_get_contents() verwenden, alles ersetzen und dann eben eval().

        Aber sauber ist das so oder so nicht. Was bezweckst du denn damit, ein Template auf zwei unterschiedliche Arten zu parsen?

        Basti

        Kommentar


        • #5
          Hi!

          Es ist für eine Suchfunktion! Die Datei in der das Keyword gefunden wird, wird Zeile für Zeile eingelesen, das Keyword markiert und ausgeben. Nur in den ganzen Dateien ist eben auch noch überall PHP-Code enthalten

          Werd mir das: http://de.php.net/manual/en/ref.outcontrol.php jetzt erstmal anschauen, obwohl es auf den ersten Blick kompliziert aussieht.

          Vielen Dank vorerst!

          Kommentar


          • #6
            ...ist nicht Kompliziert. Und auch ein besserer Ansatz, als andersrum. Schließlich willst du ja die Werte der auszugebenden Seite ersetzen und nicht innerhalb eines Templates. Wäre mit dem Regexp oben ja auch nicht fehlerfrei möglich gewesen.

            Warum aber class="error"? (Entschuldige meine Neugerde...)

            Basti

            Kommentar


            • #7
              Also ich hab es nicht kapiert

              Hab jetzt mal probiert alle Zeilen in ein Cookie zu speichern und das zu includen, aber da erscheint immer eine Fehlermeldung, die aber noch mit anderen Code zusammenhängt glaube ich.

              class=error ist nur ein CSS, die Formatierung passt eben zum hervorheben!

              Kommentar


              • #8
                Zitat von NetLook
                Hab jetzt mal probiert alle Zeilen in ein Cookie zu speichern und das zu includen
                Wie kommst du denn auf die verrückte Idee? Starte einfach den Output Buffer (ob_start()). Alles, was du von da an ausgibst, landet nicht im Browser des Benutzers, sonder eben im Output Buffer, einem bestimmten Speicher eben. Wenn du alles "Augegeben" hast, dann holst du dir die "Ausgabe" aus dem Speicher und löschst diesen (ob_get_clean()). Dann führst du auf diesem String deine Änderungen durch, schaltest den Output Buffer wieder aus (ob_end_clean()) und gibts das Ergebnis deiner Ersetzung aus. Diesmal landet es dann direkt beim Benutzer auf dem Schirm, da der OB ja wieder ausgeschaltet ist.

                class=error ist nur ein CSS, die Formatierung passt eben zum hervorheben!
                Pfusch! *g

                Basti

                Kommentar

                Lädt...
                X