[PHP5] eval problem

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

  • [PHP5] eval problem

    hi leute,

    evtl liegt auch nur ein verständnisproblem vor

    Inhalt einer PHP-Datei in einen String schreiben [COLOR=green]TRUE [/COLOR]
    PHP-Code aus dem String ausführen [COLOR=green]TRUE [/COLOR]
    "Ausgabe" mittels return zurückgeben [COLOR=red]FALSE [/COLOR]

    eval gibt sofort sein ergebnis sofort aus .. aber DAS ist nicht in meinem interesse .. wüsstet ihr dort eine möglichkeit?
    Den so bin ich im moment an der gleichen stelle wie ich mit include gewesen wäre.

    thx schonmal im voraus
    Gruß
    Uzu

    private Homepage

  • #2
    Wenn ich dich richtig verstanden habe, suchst du:

    ob_start

    mfg
    ps: geht auch beim include..

    Kommentar


    • #3
      thx .. sieht schonmal super aus.

      dann muss ich in der funktion die das return erwartet nur noch ob_end_flush() ausführen?!?!?!

      EDIT:

      scheint so nicht zu klappen



      PHP-Code:
      class LoadContent
      {
         
      #[...]
         
      public function LoadContent($module_name$file_name "")
         {
            
      #[...]
            
      $template_content = new Template(LoadConfig::getData("theme_dir")."template_content.html");
            
      $template_content->replace("title"$module_name);
            
      $template_content->replace("text"$this->getModule());
            echo 
      $template_content->echo_template();
         }

         private function 
      getModule()
         {
            return 
      $this->checkModule();
            
      ob_end_flush();
         }

         private function 
      checkModule()
         {
            
      #[...]
         
      }

         private function 
      loadModule($path_to_file)
         {
            
      $fp fopen($path_to_file'r');
            while (
      $file fgets($fp))
            {
               
      $input .= $file;
            }
            
      fclose($fp);

            
      ob_start();
            eval(
      $input);
         }

      Zuletzt geändert von UzumakiNaruto; 19.07.2008, 16:18.
      Gruß
      Uzu

      private Homepage

      Kommentar


      • #4
        Wenn es so im Manual steht -hust-

        Kommentar


        • #5
          Original geschrieben von Blackgreetz
          Wenn es so im Manual steht -hust-
          so wie ich das will will php das nicht ... eval schreibt es dennoch sofort
          Gruß
          Uzu

          private Homepage

          Kommentar


          • #6
            dann wäre es eventuell sinnvoll etwas code zu zeigen...

            mfg

            Kommentar


            • #7
              Original geschrieben von Blackgreetz
              dann wäre es eventuell sinnvoll etwas code zu zeigen...

              mfg
              richte mal deine augen nach oben .. dort findest du welchen
              Gruß
              Uzu

              private Homepage

              Kommentar


              • #8
                Falls sie mit dem Puffer-Inhalt weiter arbeiten möchten, müssen sie diesen erst per ob_get_contents() zwischen speichern bevor sie ob_end_flush() aufrufen, da dadurch der Puffer geleert wird.

                Diese Funktion ähnelt ob_get_flush(), liefert aber nur den Erfolgsstatus statt des aktuellen Pufferinhalts zurück.
                Dies sagt php.net zu ob_end_flush() ...

                Wolltest du das, oder den Inhalt?
                Dachte mein -hust- wäre eindeutig, falls ich dich richtig verstanden hatte..

                Btw: Warum schreibst du deine Funktion in PHP4/5 statt 5? ..

                ..Ich weiß allerdings nicht, ob solch eine Output Controll auch bei Klassen funktioniert und hab auch gerade keine Lust, es selber zu testen..

                mfg

                Kommentar


                • #9
                  ich möchte verhindern das eval vorschnell den inhalt sendet ... sondern eigentlich den rückgabewert von eval als return übergeben .. damit ich das ganze in das template-system bekomme.

                  also php5 ist installiert .. und so ganz bin ich nicht mit den versionsunterschieden vertraut, den ich denke du erkennst am programmcode die vermeindliche php-version.

                  auch das ob_get_contents() hatte mir nichts gebracht

                  PHP-Code:
                  ob_start();
                  eval(
                  $input); 
                  funktioniert ja schon nicht ... den wenn ich weder ob_get_contents() und ob_end_flush() benutze, kommt dennoch der inhalt von eval .. und zwar als echo sofort.
                  Gruß
                  Uzu

                  private Homepage

                  Kommentar


                  • #10
                    Nach einem return kannst du dir jeglichen weiteren Code sparen. Er wird niemals ausgeführt.

                    Imho ist es sehr schlechter Stil, in einer Methode das Output Buffering zu starten und in einer anderen zu beenden, auch wenn beide Methoden private sind. Damit erzwingst du, dass beide Methoden immer paarweise und in richtiger Reihenfolge aufgerufen werden. Dieser Zwang drückt sich aber nirgendwo aus, man muss schon den Code kennen. In einem Jahr wirst du ihn selbst nicht mehr im Kopf haben und ich wünsche viel Spaß beim Debugging.

                    Last but not least ist die Methode loadModule() doch eigentlich nichts anderes als ein require. Wieso baust du das so umständlich nach?

                    Kommentar


                    • #11
                      Original geschrieben von onemorenerd
                      Nach einem return kannst du dir jeglichen weiteren Code sparen. Er wird niemals ausgeführt.

                      Imho ist es sehr schlechter Stil, in einer Methode das Output Buffering zu starten und in einer anderen zu beenden, auch wenn beide Methoden private sind. Damit erzwingst du, dass beide Methoden immer paarweise und in richtiger Reihenfolge aufgerufen werden. Dieser Zwang drückt sich aber nirgendwo aus, man muss schon den Code kennen. In einem Jahr wirst du ihn selbst nicht mehr im Kopf haben und ich wünsche viel Spaß beim Debugging.

                      Last but not least ist die Methode loadModule() doch eigentlich nichts anderes als ein require. Wieso baust du das so umständlich nach?
                      das ob_start() etc kannte ich bis eben nicht und kenne somit vor und nachteile des ganzen spieles nicht.

                      include/require erfüllen meine anforderungen ja nicht, da include/require SOFORT ausgeben und nicht zu einem zeitpunkt wenn ich es wünsche und ich somit den inhalt an eine bestimmte stelle im template-system bekomme
                      Gruß
                      Uzu

                      private Homepage

                      Kommentar


                      • #12
                        ist es denn so schwer?

                        PHP-Code:
                        ob_start();
                        include_once(
                        $file);
                        $parsed_content ob_get_contents();
                        ob_end_clean(); 

                        Kommentar


                        • #13
                          Original geschrieben von 3DMax
                          ist es denn so schwer?

                          PHP-Code:
                          ob_start();
                          include_once(
                          $file);
                          $parsed_content ob_get_contents();
                          ob_end_clean(); 
                          schwer nicht .. aber anscheinend nicht die lösung meines problemes
                          jetzt habe ich aber den inhalt der php datei an der richtigen stelle .. aber wenn ich den dann mit eval "ausführen" lasse wird er wieder als eche ausgegeben und ist nicht mehr an der richtigen stelle.
                          Gruß
                          Uzu

                          private Homepage

                          Kommentar


                          • #14
                            Original geschrieben von UzumakiNaruto
                            ... aber anscheinend nicht die lösung meines problemes
                            jetzt habe ich aber den inhalt der php datei an der richtigen stelle .. aber wenn ich den dann mit eval "ausführen" lasse wird er wieder als eche ausgegeben und ist nicht mehr an der richtigen stelle.
                            verstehe ich nicht, mit dem schnipsel erhälst du den php-interpretierten inhalt und eval ist überflüssig.

                            Kommentar


                            • #15
                              @Uzumaki: include ^= fopen + eval ... wenn du so willst

                              ps: geht auch beim include..
                              Hatte ich schon ganz am Anfang gesagt :/

                              mfg

                              Kommentar

                              Lädt...
                              X