Jossi: php Datei ausführen (nicht ausgeben) und in Avriable schreiben

Ich möchte meinegesamten html Ausgaben in einer Varibale speichern. Das geht bis auf Dateien die auch einen PHP Code inne haben.

$output= file_get_contents("testdatei.php");

so ist nur der reine Code in meiner $output Variable

$output= include("testdatei.php");

so wird er aber sofort ausgführt und ausgegeben, aber nicht in die Variable $output geschrieben.

Wie schaffe ich es das die Datei zwar ausgeführt wird, aber nicht ausgegeben, sondern eben die Ausgabe in die Variable $output geschrieben wird.

Jossi

  1. Hallo Jossi,

    Die Output-Control-Funktionen von PHP sind wohl das, was du suchst. Ein kleines Beispiel:

    ob_start();
    include('testdatei.php');
    $variable = ob_get_clean();
    

    Gruß
    Julius

    1. Hallo Julius!

      Danke ich habe es jetzt so gemacht.

      ob_start();
      include('testdatei.php');
      $variable= ob_get_clean();
      ob_end_clean();
      

      und bei zwei, oder mehr dann so:

      ob_start();
      include('testdatei.php');
      $variable= ob_get_clean();
      
      ob_start();
      include('testdatei2.php');
      $variable.= ob_get_clean();
      ob_end_clean();
      
      1. Hi,

        Danke ich habe es jetzt so gemacht.

        
        > ob_start();
        > include('testdatei.php');
        > $variable= ob_get_clean();
        > ob_end_clean();
        
        

        warum rufst du ob_end_clean() zweimal auf?

        So long,
         Martin

        1. Hallo Martin,

          ob_start();
          include('testdatei.php');
          $variable= ob_get_clean();
          ob_end_clean();
          

          warum rufst du ob_end_clean() zweimal auf?

          ob_end_clean löscht zwar ebenfalls den Pufferspeicher, beendet aber auch das Puffern, das sollten laut Doku zwei verschiedene paar Schuhe sein:

          ob_end_clean — Clean (erase) the output buffer and turn off output buffering ob_get_clean — Get current buffer contents and delete current output buffer

          Quelle: Output Control Functions

          Weniger doppelt gemoppelt wäre vielleicht:

          $variable = ob_get_contents();
          ob_end_clean();
          

          Gruß
          Julius

          1. Hi,

            ob_start();
            include('testdatei.php');
            $variable= ob_get_clean();
            ob_end_clean();
            

            warum rufst du ob_end_clean() zweimal auf?

            ob_end_clean — Clean (erase) the output buffer and turn off output buffering ob_get_clean — Get current buffer contents and delete current output buffer

            ah, mein Fehler - ich hatte zweimal "end" gesehen, anstatt einmal "get" und einmal "end".
            Wer lesen kann, ist klar im Vorteil ...

            So long,
             Martin

            1. Hallo Martin,

              ah, mein Fehler - ich hatte zweimal "end" gesehen, anstatt einmal "get" und einmal "end".

              Doppelt gelöscht, ist trotzdem doppelt gemoppelt, zumindest da hast du Recht :-) – Ist zwar nicht schlimm, aber der Perfektionist in mir schreit trotzdem...

              @Jossi:
              So sollte es noch ein wenig sauberer sein (die letzten beiden Zeilen beachten!):

              ob_start();
              include('testdatei.php');
              $variable= ob_get_clean();
              
              ob_start();
              include('testdatei2.php');
              $variable = ob_get_contents();
              ob_end_clean();
              

              Gruß
              Julius

  2. Hallo,

    Ich möchte meinegesamten html Ausgaben in einer Varibale speichern.
    Das geht bis auf Dateien die auch einen PHP Code inne haben.

    $output= file_get_contents("testdatei.php");

    so ist nur der reine Code in meiner $output Variable

    genau, so liest du ja auch nur den Dateiinhalt.

    $output= include("testdatei.php");

    so wird er aber sofort ausgführt und ausgegeben, aber nicht in die Variable $output geschrieben.

    Korrekt.

    Wie schaffe ich es das die Datei zwar ausgeführt wird, aber nicht ausgegeben, sondern eben die Ausgabe in die Variable $output geschrieben wird.

    Output Buffering könnte dir weiterhelfen.

    So long,
     Martin

  3. Hallo

    Ich möchte meinegesamten html Ausgaben in einer Varibale speichern. Das geht bis auf Dateien die auch einen PHP Code inne haben.

    $output= file_get_contents("testdatei.php");

    so ist nur der reine Code in meiner $output Variable

    Natürlich, file_get_contents liest den Inhalt einer Datei in einen String ein. Der Inhalt ist bei einer Nichtbinärdatei der in der Datei befindliche Text.

    $output= include("testdatei.php");

    so wird er aber sofort ausgführt und ausgegeben, aber nicht in die Variable $output geschrieben.

    include ist keine Funktion mit einem Rückgabewert. Es wird eine Datei in den aktuellen Codekontext eingebunden. Handelt es sich um PHP-Code, wird er ausgeführt.

    Wie schaffe ich es das die Datei zwar ausgeführt wird, aber nicht ausgegeben, sondern eben die Ausgabe in die Variable $output geschrieben wird.

    Erzeuge im eingebundenen Code die Ausgabe.

    <?php
    // testdatei.php
    
    $output  = '<h1>Meine Ausgabe</h1>';
    $output .= '<p>Hier steht drin, was immer drinstehen soll.</p>';
    ?>
    
    <?php
    // mache irgendwas
    
    include("testdatei.php")
    
    if (isset($output)) { // eventuell weitere Prüfungen
        echo $output;
    } else {
        echo '<p>Es ist keine vorbereitete Ausgabe vorhanden.</p>';
    }
    ?>
    

    Tschö, Auge

    --
    Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
    Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
    1. Hi,

      $output= include("testdatei.php");

      so wird er aber sofort ausgführt und ausgegeben, aber nicht in die Variable $output geschrieben.

      include ist keine Funktion mit einem Rückgabewert.

      es ist eine Art Zwitter. Die include-Anweisung kann auch wie eine Funktion verwendet werden, wobei die Klammern um das vermeintliche Argument (den Dateinamen) nicht zwingend nötig sind, es ist eben keine echte Funktion.

      So long,
       Martin

  4. Hi Jossi,

    $output= include("testdatei.php");
    

    so wird er aber sofort ausgführt und ausgegeben, aber nicht in die Variable $output geschrieben.

    Dein Script tut genau das, was du programmiert hast.

    Was steht denn in dieser „testdatei.php“?

    Bis bald

    --
    Hosen sind Blau