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