Ankündigung

Einklappen
Keine Ankündigung bisher.

Include in Variable

Einklappen

Neue Werbung 2019

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

  • Include in Variable

    Hallo,

    ich möchte die Ausgabe einer PHP Datei via include (Alternativen?) in eine Variable speichern.

    Im Netz habe ich folgende Lösung gefunden:

    PHP-Code:
    ob_start();  //startet Buffer 
    include("datei.php");  //datei.php ist jetzt im Buffer 
    $var=ob_get_contents();  //Buffer wird in $var geschrieben 
    ob_end_clean();  //Buffer wird gelöscht 
    echo $var;  //$var wird weiter verwendet 
    Gibt es da einer etwas schönere Alternative?

    Natürlich wäre es kein Problem, das ganze anders zu lösen (etwa die Variable in der zu includierenden Datei definieren und dann einfach benutzen), mich würde das einfach mal interessieren wie man sowas noch umsetzen kann.

    mfg
    Link

  • #2
    Was ist da unschön dran? Du kannst das ganze auch in eine Funktion auslagern, dann gehen Variablensettings im Include aber nicht in den globalen Scope über.

    Kommentar


    • #3
      Also naja, unschön ist halt nen subjektiver Eindruck, aber ich finde das bei so einer Sache nen Buffer nen bisschen übertrieben ist

      Das die Variablensettings innerhalb der Funktionen bleiben und nicht übergehen, ist relativ egal, da für mich in diesem Fall nur die Ausgabe zählt. Normal hätte ich das ganze auch mit Funktionen gemacht, allerdings fand ich auf Grund der benötigten Modularität die include Variante irgendwie besser.

      mfg
      Link

      Kommentar


      • #4
        Ach so, nee ich meinte das:

        PHP-Code:
        <?
        function getOutput ($file)
          {
          ob_start();

          include($file);
          $var=ob_get_contents();
          ob_end_clean();

          return ($var);
          }

        Kommentar


        • #5
          Achso Naja in eine Funktion hätte ich das ganze dann eh gepackt.

          Ich glaub ich bleib ersteinmal bei der Lösung, bis ich etwas in meinen Augen besseres finde

          Wie sieht das mit den Buffern generell eigentlich mit der Performance aus?


          mfg
          Link

          Kommentar


          • #6
            So schlimm kanns nicht sein

            http://www.google.de/search?hl=de&q=...le-Suche&meta=

            EDIT
            Hier noch was für den Attraktivitätsgewinn ob_get_clean()

            Kommentar


            • #7
              Hm jetzt bin ich aber überrascht. Eigentlich bin ich ja davon ausgegangen, dass der Buffer etwas länger dauert. Wenn ich mir jetzt allerdings das erste Googleergebnis ansehe (http://www.ilimitado.de/blog/program...output-buffer/) ist gerade das Gegenteil der Fall. Find ich persönlich etwas unlogisch (bezogen auf das im Artikel getesteten Beispiels: PHP muss doch sowieso 500 echo's ausgeben, egal ob mit Buffer oder ohne, warum soll das mit Buffer dann schneller sein), aber das ist dann wohl ein Grund mehr, diese Methode zu verwenden.


              mfg
              Link

              Kommentar


              • #8
                Vielleicht nutzt php intern sowieso eine Art Buffer. Nun weiß man nicht, wie sichs mit HTML Quellcode ausserhalb PHP verhält. Aber, wie gesagt, Performanceprobleme wird man wohl eher an anderen Stellen bekommen als beim OB.

                Kommentar


                • #9
                  Ich denke der Unterschied liegt darin, wie php bei Ausgben arbeitet, wenn php implicit_flush aktiviert hat, wird quasi nach JEDEM echo/print/etc ein flush(); aufgerufen und der inhalt an den Browser geschickt, das führt unter umständen zu einem recht hohen overhead, weil auch jedes flush(); performance frisst.

                  Das einzige was so dann größer wird, ist wohl der Speicherverbrauch des Scripts, weil es den ganzen Code ja im Speicher halten muss.

                  Kommentar


                  • #10
                    das sollte mal mit session.use_trans_sid = 0 getestet werden.

                    Vielleicht nutzt php intern sowieso eine Art Buffer.
                    jap, nicht umsonst gibts die verschiedenen funktionen flush() und ob_end_flush();

                    aber wegen dem internet explorer haben die entwickler sowieso ein gewurschtel aus den ob funktionen gemacht....

                    Kommentar


                    • #11
                      Zitat von brian johnson
                      aber wegen dem internet explorer haben die entwickler sowieso ein gewurschtel aus den ob funktionen gemacht....
                      Habe ich irgendwas verpasst?

                      mfg
                      Link

                      Kommentar


                      • #12
                        Just my 2 cents:
                        Dass zu viele echo()s auf die Performance gehen muss allein schon deshalb klar sein, weil dazu Daten über den Netzwerkstack geschickt werden müssen. Aus diesem Grund baue ich z.B. im Adventure-PHP-Framework eine komplette Seite im Speicher zusammen und schicke diese mit einem einzigen echo() an den Benutzer zurück. Frameworks wie das Zend Framework oder auch CakePHP verwenden aus Performance-Gründen ebenso die ob_*()-Funktionen. Der im Eingangspost enthaltene Code ist auch in beiden Frameworks enthalten und in einer Funktion gekapselt, die den Output eines Templates erzeugt.

                        Kommentar

                        Lädt...
                        X