[PHP] Content in outputbuffer wijzgen en met gzip verzenden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
PHP:
1
2
3
4
5
6
7
8
9
10
11
// Content ophalen
$output = ob_get_contents();

// Replaces
if (isset($page_title)) $output = str_replace("{PAGE_TITLE}", $page_title, $output);

// Buffer opschonen
ob_end_clean();

// Buffer weergeven
var_dump($output);


Is het mogelijk om de content uit de output buffer, op te halen en dan alsnog te gecomprimeerd verzenden? Als ik ob_start("ob_gzhandler"); gebruik, kan ik de buffer niet wijzigen. In bovenstaande code-snippet haal ik de content op, replace ik de page-title, maar kan ik het niet meer gegzipt versturen.

Wat is nou de meest efficiente manier? Weer een nieuwe buffer openen met de gewijzigde content en die wegschrijven? Een echte template-parser zou hier natuurlijk ideaal zijn, maar dat gaat niks worden helaas.

Acties:
  • 0 Henk 'm!

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Klinkt als een hoop ingewikkeld gehannes voor iets wat je eigenlijk op een andere plek zou willen doen?

Wat wil je er precies mee bereiken of waarom wil je het precies bereiken?

Ik kan me eigenlijk niet voorstellen waarom je content (icm een template parser?) zou willen wijzigen vanuit de output buffer. Dat is zo fout om zulke vele redenen.

[ Voor 32% gewijzigd door Laurens-R op 14-07-2010 16:23 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

De meest efficiënte manier is om dit gewoon door je webserver af te laten handelen. Dat houd je code ook een stuk overzichtelijker.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Hipska
  • Registratie: Mei 2008
  • Laatst online: 15-09 21:08
Inderdaad. In plaats van overal echo te doen kan je beter $output .= doen en dan gewoon op het einde die replace doen en helemaal op het einde echo $output.

Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
Hmmm, helaas heb ik niet de mogelijkheid om het allemaal te veranderen.

Ik heb namelijk;

- HTML-top
- content
- HTML-bottom

In deze volgorde. Ik wil namelijk de page_title maken in content en deze in HTML-top erin zetten. Aangezien het allemaal require is, kan ik niet meer terug zeg maar. Dus ik had gehoopt, deze gewoon (simpel) te kunnen replacen bij het outputten van de code.
Is er niet iets, waarmee ik alsnog deze var/constant/etc alsnog achteraf kan setten?

Normaal maak je je content, ga je deze in je template zetten op de juiste plek, maar dat kan niet meer.

[ Voor 10% gewijzigd door TheNephilim op 14-07-2010 16:43 ]


Acties:
  • 0 Henk 'm!

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Waarom ga je niet naar het bestand dat de title genereerd en pas je het niet aan?

Lijkt me een stuk gemakkelijker.

Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
EvilB2k schreef op woensdag 14 juli 2010 @ 16:53:
Waarom ga je niet naar het bestand dat de title genereerd en pas je het niet aan?

Lijkt me een stuk gemakkelijker.
Omdat ik op het moment dat ik de HTML-head genereer, nog niet weet wat de titel is. Dat is het grote probleem :P ... nou heb ik het wijzigen van de buffer al weggehaald, hij verprutst er ook de layout mee.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je werkelijke probleem is dus dat je je weergave niet goed van je logica gescheiden hebt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
Dat zou nog wel eens kunnen kloppen, mijn huidige opbouw bestaat uit index.php ... daar gaan alle includes in. ?page=main idee is het eigenlijk.

Wat zijn eigenlijk de reguliere manieren om dit te doen? Ik kan me niet voorstellen dat iedereen alle content verzameld in $output en uiteindelijk deze weergeeft.

Acties:
  • 0 Henk 'm!

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Uhm... hoewel dit redelijk basic info is die je eigenlijk zo googelt, hier dan toch een paar regels als antwoord op je vraag:

Er zijn tal van mogelijkheden. Aan je posts te zien heb je (vermoed ik) nog niet veel ervaring met (web) development. In dat geval is het belangrijkste dat je:

- eerst alle benodigde informatie ophaalt uit een eventuele database.
- noodzakelijke gegevens verwerkt/aanpast/etc.
- en pas als laatste de HTML/markup code etc genereerd!

Het mooiste is als je dit in meerdere tiers/layers in je architectuur kan verwerken. En als die termen je nog niks zeggen, heb je nog het e.e.a. te leren ;) Als dat een beetje wilt lukken zou je ook naar patterns als MVC etc kunnen kijken... maar volgens mij heb je eerst nog het 1 en ander aan ervaring nodig.

[ Voor 25% gewijzigd door Laurens-R op 14-07-2010 22:41 ]


Acties:
  • 0 Henk 'm!

  • Hipska
  • Registratie: Mei 2008
  • Laatst online: 15-09 21:08
Bernardo schreef op woensdag 14 juli 2010 @ 17:10:
Wat zijn eigenlijk de reguliere manieren om dit te doen? Ik kan me niet voorstellen dat iedereen alle content verzameld in $output en uiteindelijk deze weergeeft.
Wel, eigenlijk komt het daar wel op neer grotendeels, dus: Ja.

Hoe het meestal gebeurt zei EvilB2K ook al.

Men gaat eerst alle benodigde data ophalen/berekenen (dus dan weet men ook al de title).
Daarna pas als laatste gaat men de html gaan genereren en steekt men de content erin.
Dus in plaats van die replace kan je dan gewoon rechtstreeks echo $title; doen op de juiste plaats.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Waarom gebruik je niet een meer-dan-standaard templateengine als TemplatePower of Smarty? :)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
Bedankt voor de tips, ik zal me er eens in verdiepen! :D

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Bernardo schreef op woensdag 14 juli 2010 @ 16:18:
Als ik ob_start("ob_gzhandler"); gebruik, kan ik de buffer niet wijzigen.
En als je dat op regel 9 van je script doet?
Pagina: 1