output buffering erklären
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
beenden
dank
datei
ende
frage
funktion
header
http
layout
nutzen
ordnung
output
paar
problem
server
sinnvolle anwendungen
url
vorstellen
zugreifen
-
also, ich habe im zuge meiner studien und probleme jetzt ja auch mit headerproblemen zu tun gehabt, und festgestellt das man es durch output bufferung umgehen kann. nach langem googln bin ich aber noch nicht schlauer geworden zu einigen fragen:
- was sind vor und nachteile dieser bufferung?
- wofür braucht man es genau? also gibt es einen speziellen bereich wo sowas unerlässlich ist?
- wie kann ich mir das vorstellen? ist es wirklich einfach datensammelung aufn server, die erst nach dem flush gesendet werden?
- warum ein ob_end_flush und kein einfaches ob_flush? warum genau muss ich manchmal dieses buffern beenden, und andere male nicht?
- gibt es besondere vorraussetzungen die erfüllt werden müssen um das buffern zu nutzen/sinnvoll zu nutzen?
das sind so ein paar dinge die mich interessieren, vllt kann das hier ja einer erklären, oder ein tutorial was bei möglichkeit deutsch ist (mein englisch ist nicht perfekt) posten, das mir das ganze in bissel näher bringt.
ich möchte so ziehmlich alles lernen was ich im PHP nutzen und gebrauchen kann, und der name klingt wichtig -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi!
Ich würde dir dringend raten, das ob_ zu vermeiden. Versuche lieber sauber zu programmieren. Am besten mit einer minimalistischen Templateengine (kein Smarty!) oder zumindest mit irgendner $output-Variablen. Aber das nur mein Tipp an dich ;) -
Ich empfehle, es so zu machen:
- Mache dir eine Funktion, die nur einen Buchstaben lang ist, diese hängt den übergebenen Parameter einfach an eine bereits besetehende globale Variable an. Ich empfehle dir die globale Variable '', da man auf diese nur über das Globals-Array, also mit $GLOBALS[''] zugreifen kann. Somit besteht keine Gefahr, dass die die Variable aus Versehen im Script überschreibst.
- Diese Funktion speicherst du in einer Datei, welche du in jeder Datei ganz oben includest.
- Am Ende jeder Datei inlcudest du eine Datei namens "layout.php".
- In dieser Datei machst du dein Layout. Auf die zuvor gespeicherte Ausgabe greifst du mittels $GLOBALS[''] zu. Dir stehen alles Variablen und Werte des Scripts zu Verfügung, du kannst also Meldungen usw. ausgeben, die du zuvor in einem Array gesammelt hast.
Es wird sich sicher auszahlen. Das ist Ordnung, und Ordnung ist der Weg zum Erfolg. -
ähhh. ja...
das ging jetzt aber 100% und voll am thema vorbei, denn was es ist weiß ich immernoch nicht.
wenn ihr meint "is so schlecht, lass finger davon", dann würd ich gern wissen WARUM. weil mich interessiert ja der HINTERGRUND, nen placebo krieg ich auch so hin
meine frage ist ja, was es damit auf sich hat, und wenn du fragst "was is nen auto" und man antwortet dir "lass die finger davon, is gefährlich" bist du ja auch nicht zufrieden.
also, kann vllt jemand nochmal auf das hauptsächliche kommen?^^ -
- wofür braucht man es genau? also gibt es einen speziellen bereich wo sowas unerlässlich ist?
Oft wird OB in Verbindung mit HTTP-Header-Manipulierung mittels header(), Sessions oder Cookies verwendet. Dies erfolgt, da man nicht mehr auf den HTTP-Header zugreifen kann, nachdem die erste Ausgabe erfolgt ist. Daher nutzt man OB: Man gibt einfach nichts aus.
- wie kann ich mir das vorstellen? ist es wirklich einfach datensammelung aufn server, die erst nach dem flush gesendet werden?
In PHP gibt es mehrere Streams. Darunter auch der output-Stream, zu finden unter php://output. Wenn du kein OB benutzt, wird PHP bei einem echo oder print direkt in diesen Stream schreiben. Wenn OB aktiviert ist, wird der Output zwischengespeichert.
- warum ein ob_end_flush und kein einfaches ob_flush? warum genau muss ich manchmal dieses buffern beenden, und andere male nicht?
Meistens beendet man das OB gleich, denn man den zwischengespeicherten output am Ende des Scripts flushed. Ich wüsste nicht, warum man ihn an lassen sollte.
- gibt es besondere vorraussetzungen die erfüllt werden müssen um das buffern zu nutzen/sinnvoll zu nutzen?
Nein.
Warum man immer so schlecht von OB redet weiß ich nicht Mal.
Wahrscheinlich ist das nur Mist. Der einzige echte Nachteil von OB ist, dass der Server noch keinen Inhalt an den Browser schicken kann, wenn dieser gebuffert wird. Aber das Problem besteht auch bei Sammlung in globaler Variable und Templating.
Fällt mir iwie erst jetzt auf, dass OB vielleicht besser ist, als dieses $output-Variablen Dings, usw. -
Jede Funktion ist immer nur so gut, wie der, der sie benutzt.... oder so ähnlich. :P
Bei der Headermanipulierung gibt es oft tatsächlich elegantere Wege. Aber manchmal sind diese Funktion sehr nützlich um "einfachen" Code zu fabrizieren.
Ich habe zum Beispiel schonmal ein System geschrieben, dass mir ermöglicht PHP-Scripts in mein Template einzubinden und ähnliche Spielereien. Dabei brauchte ich das für die Fehlerbehandlung. Resultat war ein Verhältnismäßig kurzer Code, leicht zu überschauen und trotzdem recht performant. ( Eigenangabe :P )
Problematisch bei diesen Funktionen ist, dass sie dazu verleiten, unübersichtlichen Code zu fabrizieren oder zu pfuschen. Oft gibt es einfacher elegantere Wege.
Es kommt eben drauf an, wie man die Funktionen benutzt. Wie immer. ;D -
danke :)
dass ist echt super informativ :)
die paar seiten (die zu meinem bedauern englisch waren) haben es nur "angepriesen" und da kam nichts negatives bei rum. es hieß nur wie gesagt wurde: vorsichtig mit umgehen, es ist nur so gut wie sein nutzer.
und der beitrag von dir nikic war echt aufschlussreich :) so hab ich mir das gewünscht, des war echt nen super hilfreicher post! schade, dass ich dir kein Karma geben kann ^^
danke nochmal :)
sollte niemand mehr etwas zu diesem thema haben, oder mir doch noch einen negativen beigeschmack geben, dann denke ich kann das geclosed werden. -
Es gibt sinnvolle Anwendungen für das Buffering.
Wenn Du z.B. ein komplexes Script hast, und möchtest das Format der ausgegebenen URLs ändern (Stichwort: Mod-Rewrite), kannst Du entweder alle php-Dateien durchforsten, oder den Outputbuffer einsetzen und alle Links in der kompletten Ausgabe mit Reg-Exp ersetzen. So funktionierte z.B. der beste SEO-Mod bei phpBB2.
Eine, mittlerweile kaum noch benötigte Anwendung was das Kompremieren der Daten, die an den Client gesendet werden. Dank hinreichender wird das aber heutzutage kaum noch benötigt.
Die Referenz bei php.net zeigt noch weitere sinnvolle Anwendungen.
FF
Beitrag zuletzt geändert: 7.1.2010 22:03:57 von fatfreddy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage