phpbar.de logo

Mailinglisten-Archive

[php] sessions und output-buffering

[php] sessions und output-buffering

Oliver Michalak php_(at)_phpcenter.de
Wed, 8 Aug 2001 09:48:35 +0200


Hallo,

gibt es Einschr=E4nkungen bzgl. der Verzahnung von php4-Sessions und dem=

Output-Buffering=3F

Meine Erinnerung war, dass bei ob=5Fstart nicht der ob=5Fgzhandler benut=
zt
werden darf, gibt es dar=FCber hinaus noch Aufrufreihenfolgen, die man
beachten muss=3F Oder Formular-Probleme=3F

Folgendes Szenario bereitet bei mir Probleme:
zwei Klassen, die ich benutze, werden bei jeder php-Datei noch vor dem
HTML-Code include'ed. Damit protokolliere ich die Seiten und habe lokal
nach der HTML-Ausgabe die M=F6glichkeit, den HTML-Code noch zu berarbeit=
en
(Thema "Templates"). Der klassische Aufruf sieht also wie folgt aus:

list.php:
----------------------- 8< -----------------------
<=3F include ("global/bom=5Fsession.php"); =3F>
<=3F include ("global/bom=5Ftpl=5Fhead.php"); =3F>
<html>
..
{BOM ENTRY}
</html>
<=3F
include ("global/bom=5Ftpl=5Ftail.php");
//...
$tpl->replace (array("ENTRY" =3D> "<li>dies ist ein dummy"));
//...
=3F>
----------------------- 8< -----------------------

Ich stelle mal das Grundger=FCst hier vor, damit ihr die Zusammenh=E4nge=

besser versteht (Achtung, l=E4nger!):
bom=5Fsession.php:
----------------------- 8< -----------------------
<=3F
// class for sessioning and tracking of users
//
// a session with an assiciated userid (uid) is instationated
// as long as a unknown user uses this session, his random uid is negati=
ve
// session data is stored in a mysql-table 'session'
// visited pages are stored in 'page'
// including this file creates a session object
// which registers itself and the actual page
// headers are send to prevent caching

include=5Fonce ("global/bom=5Fdb.php"); // db-class...
class bom=5Fsession {
=09var $db =3D false;
=09var=09$uid =3D 0;

 function bom=5Fsession() {
=09=09$this->db =3D new bom=5Fdb();
=09=09return true;
=09}

=09// initialize...
=09function start () {
=09=09if (empty ($this->uid)) {
=09=09=09srand((double)microtime()*1000000);
=09=09=09$this->uid =3D -rand(1,10000000);
=09=09=09session=5Fset=5Fsave=5Fhandler(array($this, "sess=5Fopen"), arr=
ay($this,
"sess=5Fclose"),
=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09 array($this, "sess=5Fread"=
), array($this, "sess=5Fwrite"),
=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09 array($this, "sess=5Fdestr=
oy"), array($this, "sess=5Fgc"));
=09=09=09session=5Fstart();
=09=09}
=09}

=09// session-callbacks...
 // ...

 function add=5Fpage ($url=3D"") {
=09=09$this->db->query ("insert delayed into page values('$url', '".date=
("Y-
m-d H:i:s")."', $this->uid)");
=09}

}
//...
$session =3D new bom=5Fsession();
$session->register("session");
$session->add=5Fpage ($PHP=5FSELF);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
//header("Last-Modified: " . gmdate("D, d M Y H:i:s") ." GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
header("Cache-Control: post-check=3D0, pre-check=3D0");
=3F>
----------------------- 8< -----------------------

Dann gibt es zwei Script f=FCr die "lokalen" Templates via Output-Buffer=
ing:
bom=5Ftpl=5Fhead.php:
----------------------- 8< -----------------------
<=3F
ob=5Fstart("");
=3F>
----------------------- 8< -----------------------

Und
bom=5Ftpl=5Ftail.php:
----------------------- 8< -----------------------
<=3F
// local template-class...

class bom=5Ftpl {
=09var $data =3D "";
=09var $dynblocks =3D array();
=09var $dynhandles =3D array();

=09function bom=5Ftpl ($code =3D "") {
=09=09$this->data =3D $code;
=09}
 // ..
}

// fetch cached content...
$code =3D ob=5Fget=5Fcontents();
ob=5Fend=5Fclean();
// create a bom=5Ftpl-var with this...
$tpl =3D new bom=5Ftpl ($code);
=3F>

OK, statische Seiten (auch solche mit den "lokalen Templates") werden
anstandslos verarbeitet, Seiten, die Formulare darstellen auch, aber
nicht deren Folgeseiten/-scripte, die die Formualreingaben auswerten und=

ebenso mit diesen beiden Klassen vor dem HTML-Code eingefa=DFt wurden!

Jegliche Hinweise sind sehr willkommen...   ;)))

-- 
Oliver Michalak
www.werk01.de / omich_(at)_werk01.de / 0(049)177 - 75 75 393



php::bar PHP Wiki   -   Listenarchive