phpbar.de logo

Mailinglisten-Archive

[php] Fatal Error: Unable to initialize new token cache

[php] Fatal Error: Unable to initialize new token cache

Ulf Wendel ulf_(at)_redsys.de
Mon, 06 Mar 2000 12:43:22 +0000


Matthias Weh wrote:
> Fatal error: Unable to initialize a new token cache in
> /usr/home/httpd/phplib/session.inc on line 284


> 1. Was will mir der Fehler sagen?

Geraten: Speicherprobleme?

> 2. Kann mir jemand sagen, was eval() intern ueberhaupt macht? Der Fehler
> sieht ja ganz danach aus, als wuerden da irgendwelche neuen Eintraege in
> der Symboltabelle gemacht, die selbige sprengen.

eval() führt PHP Code aus. PHPLIB macht nichts anderes als PHP-Code zu
erzeugen (serialize), in einer Datenbank zu speichern und mit einem
page_open() wieder auszuführen.

Mit einem $a=12; $sess->register("a"); page_close(); wird folgender PHP
Code generiert: $GLOBALS["a"] = "12";  Dieser Code wird so verpackt, daß
er ohne Probleme in die Datenbank paßt (base64), durch page_open()
ausgelesen und mit eval() ausgeführt, bevor Dein Skript die Arbeit
aufnimmt.

Für einfache Variablen und Arrays funktioniert das ganz ordentlich, bei
Objekten muß man angeben wie die Objekte heißen sollen (deshalb var
classname = "mein";) und welche Slots gespeichert werden müssen (
deshalb var $persistent_slots = array("a", "b"); ) - mit dem serialize
von PHP4 wird das alles besser.

> 3. Wie kann ich diesen Fehler verhindern? Naiv gedacht wuerde ich sagen,
> dass hier nur einfach die Dimensionierung von irgendwas geaendert werden
> muss, aber ich weiss halt nicht was und ob das ueberhaupt stimmt.

Keine Ahnung. Ich glaube nicht, daß das PHPLIB serialize buggy ist,
dafür wird es zuviel benutzt. 

Ich glaube, man kann es aus der Bahn werfen, wenn man PHP Code in einer
Variablen speichert und dann in die Session wirft, aber das machst Du
nicht, oder? Falls doch mach ein base54decode auf den Variableninhalt.

Versuche mal die Situation zu reproduzieren.

Ulf


php::bar PHP Wiki   -   Listenarchive