Svenni: readfile und Variablen übergeben

Hallo!

Ich binde mittels READFILE("datei.htm"); eine weitere Datei in meine Haupt-PHP Datei ein. Nun möchte ich, dass eine Funktion (oder was auch immer) aus dieser neu eingebundenen HTML-Datei eine Varaiable übergibt/ausließt.

Ich kann mir da 2 Varianten vorstellen:

  • die Haupt-PHP Seite mit dem READFILE-Befehl hat eine Funktion, die  aus dieser Datei die Variable beim einbinden ausließt

  • die Datei, die eingebunden wird, übergibt an die Haupt-PHP Seite selbstständig diese Variable

So, geht das überhaupt? Und wenn ja, wie mache ich das?!

MfG Svenni

  1. Hallo Svenni,

    mit readfile() bindest Du keinen Daten in Dein Script ein, sondern es werden Daten aus einer externen Datei direkt an die Standardausgabe geleitet. Diese Datei wird weder interpretiert noch steht ihr Inhalt später im Script zur Verfügung. Die Speichergreneze von typisch 8MB pro Script gilt hierbei auch nicht. Readfile() führt die Daten der Datei sozusagen am Parser vorbei.

    Standardausgabe ist i.d.R. der kanal zum Browser des Clients, der das Script aufgerufen hat.

    Deine Aufgabenstellung könntest Du mit file() und evtl. den Funktionen serialize() und unserialize() lösen. Etwas weiter unter läuft gerade so ein thread [pref:t=61454&m=346554] , in dem wir eine ähnliche Fragestellung haben. Ich schlage deshalb vor, die Diskussion dorthin zu verlagern.

    Grüße

    Tom

  2. Hallo,

    Ich binde mittels READFILE("datei.htm"); eine weitere Datei in meine Haupt-PHP Datei ein. Nun möchte ich, dass eine Funktion (oder was auch immer) aus dieser neu eingebundenen HTML-Datei eine Varaiable übergibt/ausließt.

    Warum nimmst Du nicht include() oder require()?
    Ist die eingebundene Datei auch von Dir? Bzw. aus einer absolut
    vertrauenswuerdigen Quelle? Hast Du Einfluss auf den Aufbau der Datei?

    Gruesse,

    Thomas

    1. Hallo Thomas,

      Warum nimmst Du nicht include() oder require()?

      Mit include() oder require() mitten in einem Script Daten einzulesen, halte ich fpr sehr bedenklich. Außerdem sollte man als Programmierer doch immer für höchstmögliche Sicherheit seiner Erzeugnisse sorgen. Warum dann also Löcher bohren, wo keine hingehören?

      Am Anfang des Scriptes halte ich das mit include() & Co. für durchaus "zulässig".

      Grüße

      Tom

      1. Hallo,

        Mit include() oder require() mitten in einem Script Daten einzulesen, halte ich fpr sehr bedenklich. Außerdem sollte man als Programmierer doch immer für höchstmögliche Sicherheit seiner Erzeugnisse sorgen. Warum dann also Löcher bohren, wo keine hingehören?

        Sorry, aber Du erzaehlst da IMHO voelligen Quatsch.

        Es spielt - von der Sicherheit her - IMHO ueberhaupt keine Rolle, an welcher
        Stelle im Script das include() stattfindet. Boeser Code kann ueberall boese Dinge anstellen.

        Viel wichtiger ist, ob man Code aus einer vertrauenswuerdigen Quelle einbindet.
        Und das ist bei _eigenem_ Code IMHO immer gegeben.
        _Fremden_ Code wuerde ich _nie_ mit include() und dergleichen einbinden,
        sondern _hoechstens_ per readfile(), fpassthru() und dergleichen direkt an
        den Browser weiterleiten, ohne den Code zu parsen.

        Gruesse,

        Thomas

        1. Hallo Thomas,

          Mit include() oder require() mitten in einem Script Daten einzulesen, halte ich fpr sehr bedenklich. Außerdem sollte man als Programmierer doch immer für höchstmögliche Sicherheit seiner Erzeugnisse sorgen. Warum dann also Löcher bohren, wo keine hingehören?

          Sorry, aber Du erzaehlst da IMHO voelligen Quatsch.

          Ja? Wie kommst Du darauf? Ich verstehe Dich nicht, oder reden wir aneinander vorbei? War ikch Dir gegenüber auch so ageressiv? Dann entschuldige bitte.

          1. Mit include() oder require() mitten im Script VARIABLEN einzulesen, halte ich für bedenklich. Da schleichen sich schnell Fehler ein und man hat dann plötzlich die im Script bereits anderweitig benutzen Bezeichner wieder überschrieben.

          2. Eine Sicherheitslücke sind include() und require() immer. Warum sollte man sie dann also benutzen, wenn es eine viel sicherere Methode gibt, Variablen nebst ihren Typen, Namen und Werten wohlstrukturiert in einem Array abzulegen und wieder einzulesen. Das sicher bezieht sich darauf, dass die Prozesskontrolle zu keinem Zeitpunkt an den Code aus der externen Quelle (extern meint hier außerhalb des Scriptes) übertragen wird. Das ist nicht notwendig und daher zu vermeiden.

          Liebe Grüße

          Tom

          1. Hallo,

            Mit include() oder require() mitten in einem Script Daten einzulesen, halte ich fpr sehr bedenklich. Außerdem sollte man als Programmierer doch immer für höchstmögliche Sicherheit seiner Erzeugnisse sorgen. Warum dann also Löcher bohren, wo keine hingehören?
            Sorry, aber Du erzaehlst da IMHO voelligen Quatsch.
            Ja? Wie kommst Du darauf? Ich verstehe Dich nicht, oder reden wir aneinander vorbei? War ich Dir gegenüber auch so ageressiv? Dann entschuldige bitte.

            Nein, Du warst nicht aggressiv.

            Weil Du beides sozusagen in einem Atemzug nanntest ("mitten im Script" und "Sicherheit"),
            hatte ich den Eindruck, dass Du sagen wolltest, es sei _sicherer_, externe Dateien
            nur am Anfang des Scripts mit include() einzubinden, als diese mitten im Script zu tun.
            Und das ist nun wirklich nicht der Fall, da sind wir uns hoffentlich einig.

            Es tut mir leid, dass ich so heftig reagierte.

            1. Mit include() oder require() mitten im Script VARIABLEN einzulesen, halte ich für bedenklich. Da schleichen sich schnell Fehler ein und man hat dann plötzlich die im Script bereits anderweitig benutzen Bezeichner wieder überschrieben.

            Das stimmt natuerlich - es ist leichter, den Ueberblick zu verlieren, welche Variable
            zu welchem Zeitpunkt welchen Wert enthaelt.

            Wenn man aber sorgfaeltig arbeitet und weiss, was man tut, kann man ohne weiteres
            auch mitten im Skript eine andere Datei mit include() einbinden.

            1. Eine Sicherheitslücke sind include() und require() immer. Warum sollte man sie dann also benutzen, wenn es eine viel sicherere Methode gibt, Variablen nebst ihren Typen, Namen und Werten wohlstrukturiert in einem Array abzulegen und wieder einzulesen. Das sicher bezieht sich darauf, dass die Prozesskontrolle zu keinem Zeitpunkt an den Code aus der externen Quelle (extern meint hier außerhalb des Scriptes) übertragen wird. Das ist nicht notwendig und daher zu vermeiden.

            So, wie ich das urspruengliche Posting von Svenni [pref:t=61472&m=346653] verstanden
            hatte, will Svenni genau das: Eine externe *.html-Datei aus dem gleichen Verzeichnis einlesen.
            Dort soll im Quellcode etwas stehen, was dann bewirken soll, dass eine Variable
            im Hauptscript einen neuen Wert kriegt.
            Dass das mit  readfile() nicht funktionieren kann, hast Du ja schon in [pref:t=61472&m=346665]
            erklaert.

            Ich verstand Svenni so, dass die eingebundene Datei "datei.html"

            • einerseits HTML-Quellcode enthaelt (Mutmassung wegen der Endung *.html)
            • andererseits PHP-Quellcode enthaelt, der den Wert der Variable festlegt
                 (meine Interpretation der Problembeschreibung)

            Solange die "datei.html" ebenfalls nur von Svenni stammt, gibt es hinsichtlich der
            Sicherheit fuer mich keine Bedenken, hierfuer include() zu verwenden.

            Ich denke, bevor wir hier weiterdiskutieren, sollte Svenni nochmals genauer sagen

            • was er erreichen will
            • wer die einzubindende "datei.html" erstellt
            • wie diese Datei erstellt wird
            • was diese Datei alles enthalten soll (HTML-Code, PHP-Code, beides,
                 nur Variablenwerte).

            Freundliche Gruesse,

            Thomas

            1. ReHallo Thomas,

              Das stimmt natuerlich - es ist leichter, den Ueberblick zu verlieren, welche Variable
              zu welchem Zeitpunkt welchen Wert enthaelt.

              Wenn man aber sorgfaeltig arbeitet und weiss, was man tut, kann man ohne weiteres
              auch mitten im Skript eine andere Datei mit include() einbinden.

              Ja klar, dafür ist es ja da. Es hat aber noch eine Macke. Wenn Die include-Datei vor dem   <?php    oder nach dem   ?>   noch irgendwelche Zeichen (z.B. eine Leerzeile) enthält, dann beginnt an der Stelle der Einbindung im Hauptscript die Ausgabe. Das führt auch sehr oft zu Fehlern.

              hatte, will Svenni genau das: Eine externe *.html-Datei aus dem gleichen Verzeichnis einlesen.

              Eine externe HTML-Datei kann man genau aus dem eben genannten Grund daher in der regel nicht mit include einlesen. Diese würde sofort an die Ausgabe weitergeleitet werden.

              Ich denke, bevor wir hier weiterdiskutieren, sollte Svenni nochmals genauer sagen

              • was er erreichen will
              • wer die einzubindende "datei.html" erstellt

              ob es überhaupt eine *.html sein muss

              • wie diese Datei erstellt wird
              • was diese Datei alles enthalten soll (HTML-Code, PHP-Code, beides,
                   nur Variablenwerte).

              Jau, da würde ich zustimmen, und dann hilft dieser Thread ihm vielleicht auch. Kontroverse Diskussionen sind ja deshalb auch nicht schlecht, weil jemand Drittes, der sich den Thread später aus dem Archiv filtert, dann viel schneller die "roten Fäden" zwischen den vielen Fallen finden kann.

              In diesem Sinne,

              Tom