• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Idee eines Ausgabepuffers - Frage zur Systembelastung

vitus37

Senior HTML'ler
Hallo@all!

Habe da eine Frage, was das Arbeiten mit Variablen als Ausgabepuffer angeht:

Da ich während der Ausführung meines PHP Scripts volle Variabilität im BereichHTTP-Headeränderungen haben möchte, gebe ich keine Daten mehr per echo oder print aus, sondern speichere alles hintereinander in der Variable $output.

Beispielcode:
PHP:
<?php

$output = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';

session_start();
setcookie(...);
header(...);

$output .= '<html><head><title>...</title>';

//...

echo $output;

?>

Meine Frage ist jetzt, ob dieses Verfahren an Serverleistung frisst, da ich recht häufig etwas der Variable $output hinzufüge und es auch sehr lange Textabschnitte sein können.

Würde mich freuen, wenn mich da jemand aufklären könnte.

Liebe Grüße aus dem schönen München
Vitus
 
Danke für deine Antwort.

Erkenne ich das richtig? Ich müsste erst ob_start() und dann später zum Starten der Ausgabe ob_flush() nutzen?
Muss ich für ein sauberes Buffering auch noch welche der anderen Funktionen verwenden oder sind sie nur bedingt notwendig?

Das ist neues Territorium für mich. Sorry für die Fragen.
 
ob_end_flush() bräuchtest du, damit das Buffern nach dem Flushen nicht weitergeht (siehe Doku). Aber grundsätzlich sind es nur zwei Funktionen, ja.

Output Buffering sollte aber immer der allerletzte Ausweg sein. Wenn du dich an das Prinzip von Eingabe-Verarbeitung-Ausgabe hältst, ist es eigentlich nicht notwendig.

In deinem Fall also etwa:

PHP:
<?php

session_start();
setcookie(...);
header(...);

function escape($s)
{
    return htmlspecialchars($s);
}

$tplVars['title'] = 'Meine Seite';

?> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title><?php echo esacpe($tplVars['title']); ?></title>

Dieses grundsätzliche Prinzip lässt sich auch bei komplizierteren Fällen anwenden. Auch in MVC-Frameworks wird das ähnlich gehandhabt.
 
auch sehr interessant, du kannst in diversen streams rum spielen:

file_put_contents('php://output','Hello World');
 
Danke mermshaus für deine erklärung. Ich werde es jetzt nochmal ohne Buffering versuchen, wie du sagtest.

freak131 schrieb:
auch sehr interessant, du kannst in diversen streams rum spielen:

file_put_contents('php://output','Hello World');
xD Wie cool. :D
 
Wenn du an dem Punkt angekommen bist, dass du deine Funktionen von deinem Inhalt trennen willst, wäre es vielleicht eine Idee sich MVC anzugucken oder direkt eine fertige Implementation in Form eines Frameworks.
 
Den Punkt habe ich glaube ich gerade erlebt. ;)

MVC, das scheint mir eine Lösung. Werde mich in den Ferien mal intensiv mit vorteilhaftem Programmieren befassen. Also MVC und OOP (das schiebe ich auch scho so lange vor mich hin ;))

Danke euch.
Vitus
 
CakePHP empfand ich immer als Krampf. Entweder Zend Framework (mächtig) oder Symfony (leichtgewichtig).
 
Ich empfand CakePHP immer als unordentlich bezüglich der Ordnerstruktur, sowie Klassen-/Funktionsstruktur. Ich mag einfach keine richtigen Funktionen innerhalb eines View benutzen, dass sollen lieber Methoden sein (das selbe gilt für Symfony). Deshalb habe ich mich für Zend Framework entschieden, welches allerdings die höhere Lernkurve hat.
 
Zurück
Oben