gondor: Frage zur Pufferung von Ausgaben (ob_start)

Ich möchte Variablen zur Ausgabe nutzen:

Controler:

ob_start();

include ("navigation.php");
$public_navigation = ob_get_clean();

include ("footer.php");
$public_footer = ob_get_clean();

include ("view/public/index.php");
$template = ob_end_flush();

echo $template;

-------

Die index.php sieht folgend aus:

<html>
<head></head>
<body>
  <div class="content">
    <div class="header">
      <?= $public_navigation; ?>
    </div>
    <div class="footer">
      <?= $public_footer; ?>
    </div>
  </div>
</body>
</html>

In navigation.php und footer.php ist reiner html-Code.

Leider funktioniert das nicht richtig bzw. die Variablen werden in der Reihenfolge falsch ausgegeben. So wird der footer noch 'vor' dem <html>-Tag ausgegeben...

Was ist hier falsch?

Danke für Hilfe,

gondor(..)

  1. echo $begrüßung;

    $template = ob_end_flush();

    ob_end_flush() liefert an den Server aus, nicht an das Script. Der Rückgabewert ist auch bool und nicht string, und enthält nur eine Information über den Erfolg der Aktion.

    echo "$verabschiedung $name";

    1. hi,

      das löst nicht wirklich mein Problem...

      gondor(..)

      1. echo $begrüßung;

        das löst nicht wirklich mein Problem...

        Dein Problem ist, dass die von dir verwendete Funktion nicht das von dir Gewünschte erledigt. Du hast doch schon zweimal erfolgreich den Inhalt des Puffers ausgelesen. Davon hast du dich doch sicherlich auch mit einer Kontrollausgabe überzeugt, oder nicht? Wahrscheinlich nicht, denn dabei wäre dir der nicht vorhandene Inhalt in $template aufgefallen. Zur Kontrolle eignet sich vor allem var_dump(), weil das auch den Typ einer Variablen anzeigt. Damit kann man False und null und Leerstrings voneinander unterscheiden und vor allem erkennen.

        Lies dir doch noch einmal das Kapitel Output Control Functions durch und informiere dich über die Arbeitsweisen der dort aufgeführten Funktionen.

        echo "$verabschiedung $name";

  2. Hellihello

    unterumständen musst du ob_start() nochmal ausführen (schau dir mal die doku an). fragt sich nur, ob du dein problem damit optimal löst. warum bindest du denn die dateien nicht an der stelle an oder nutzt file_get_contents()?
    Dank und Gruß,

    frankx