[PHP] Output buffering

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 06-05 12:56

Saven

Administrator

Topicstarter
Hallo Tweakers,

Ik heb een vraagje over output buffering in PHP. Ik gebruik namelijk het volgende stukje code bovenaan mijn index.php:
PHP:
1
2
3
4
5
6
7
8
<?php

if( !ob_start("ob_gzhandler") )
ob_start();

header('Content-Type: text/html; charset=iso-8859-1'); 

/* de rest van de index.. controller laden enz */


Nu doet dit naar mijn weten het volgende: Indien de browser gzipped content toe staat (dus ob_gzhandler returned true) dan gzipt hij de content.
Zoniet, dan start hij normale output buffering.

Echter gebruik ik een template-engine (zelfgemaakt) welke ik o.a. gebruik om templates te fetchen, het volgende stukje gebruikt:
PHP:
1
2
3
4
5
6
/* stukje uit de $tpl->fetch() functie */

ob_start();
    include($file);
    $output = ob_get_contents();
ob_end_clean();


Ik gebruik ook nog een display() functie, maar die geeft de content meteen weer, ik include namelijk de file zonder de output te bufferen of iets

Alleen rest mij nu nog een vraag:
Ik zou hier toch eigenlijk ook ob_gzhandler moeten gebruiken imo? Omdat ik weer content op haal..
Alleen als ik 2x ob_gzhandler wil doen krijg ik naar mijn weten een PHP Error.
En werkt dit uberhaupt wel goed? Of sla ik nu de plank mis omdat ik 2 keer output buffering start ofzo :X

Dus hoe kan ik hier het beste mee omgaan? Ik weet redelijk veel van output buffering, maar hier heb ik jullie wijsheid even bij nodig :P

[ Voor 7% gewijzigd door Saven op 05-03-2009 00:43 ]


Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 10-05 08:45
Je kunt output-buffers nesten. Dus zodra je de $output van de binnenste ob echo't, zal deze opgevangen worden door de buitenste (en gzippen).

volgens mij

[ Voor 7% gewijzigd door OnTracK op 05-03-2009 00:46 ]

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 02:50

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active. Just make sure that you call ob_end_flush() the appropriate number of times. If multiple output callback functions are active, output is being filtered sequentially through each of them in nesting order.
Het staat er gewoon bij...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 06-05 12:56

Saven

Administrator

Topicstarter
RobIII schreef op donderdag 05 maart 2009 @ 00:56:
[...]


Het staat er gewoon bij...
Nooo way 8)7
Dat staat er serieus pas net |:( Al die keren dat ik die manual heb doorgelezen zijn niet op 2 handen te tellen :P

Anyways thnx ;)

edit:
Last updated: Fri, 27 Feb 2009
Nja, voortaan toch maar voor de zekerheid nog een keer de manual bekijken voordat ik een topic open hier :$

[ Voor 20% gewijzigd door Saven op 05-03-2009 01:18 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 02:50

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Saven schreef op donderdag 05 maart 2009 @ 01:17:
[...]

Nooo way 8)7
Dat staat er serieus pas net |:( Al die keren dat ik die manual heb doorgelezen zijn niet op 2 handen te tellen :P
Last updated: Fri, 27 Feb 2009 ...
Ah, daar ben je inmiddels zelf ook achter ;)

[ Voor 12% gewijzigd door RobIII op 05-03-2009 01:19 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij