Mailinglisten-Archive |
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