Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Problem mit dem serialisieren eines Objekts [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit dem serialisieren eines Objekts


 
bones
10-01-2007, 14:06 
 
Hi Leute!

Ich hab folgendes Problem:
Und zwar hab ich ein Objekt $foo, welches ich am Ende eines Scripts mit serialize(); in einen Bytestrom verwandle und dann in eine Sessionvariable $_SESSION['bar'] schreibe...

Da ich nur ne index.php habe, in der dann alle Unterseiten included werden, hol ich mir das Objekt wieder aus der Session und wandle es mit unserialize(); wieder um...
Dann mach ich ne Abfrage obs ein Objekt ist, wenn nicht, dann instanziere ich ein neues Objekt...

Das ganze sieht ungefähr so aus:

<?php
include('klasse.php');
session_start();

$foo = unserialize($_SESSION['bar']);

if(!is_object($foo)) {
$foo = new Klasse();
}

// Das restliche Script...

$_SESSION['bar'] = serialize($foo);
?>

Jetzt tritt aber anscheinend ein Problem bei serialize($foo); auf, denn wenn ich danach ein var_dump($_SESSION['bar']; mache, dann gibt er mir nur " string(2) "N;" " aus, und wenn ich dann var_dump(unserialize($_SESSION['bar']); mach, dann gibt er mir nur " NULL " aus..

Problem liegt also definitiv nicht am Sessionmanagement, sondern an der Serialisation, nur hab ich keine Ahnung, was der Fehler ist!

Könnt ihr mir da vllt. helfen?
Achja, ich benutze PHP 5!

gruß
bones

 
TobiaZ
10-01-2007, 14:09 
 
echo $_SESSION['bar']; ergibt was?

error_reporting() fehlt auch...

 
bones
10-01-2007, 14:18 
 
Error-Reporting is sowieos immer auf E_ALL bei mir!

echo $_SESSION['bar']; gibt " N; " aus...
Also auch das gleiche wie var_dump...

Achja, was ich net erwähnt hab, $foo, ist vor dem Serialisieren 100% ein Objekt, das hab ich auch schon nachgeprüft!

Ich weiß echt net mehr weiter!
Vor Allem: wo kommt dieses " N; " her?

 
TobiaZ
10-01-2007, 14:21 
 
sorry, vardump hatte ich überlesen.

was gibt serialize($foo); zurück=

 
penizillin
10-01-2007, 14:21 
 
wie sieht denn var_dump($foo) und var_dump(serialize($foo)) aus?

 
TobiaZ
10-01-2007, 14:21 
 
sorry, vardump hatte ich überlesen.

was gibt serialize($foo); zurück?

 
ghostgambler
10-01-2007, 14:21 
 
der Klassen-Code wäre (nur eventuell) hilfreich...

 
TobiaZ
10-01-2007, 14:34 
 
Original geschrieben von bones
Achja, ich benutze PHP 5!Dann verzichte aufs serialisieren. ;)

 
bones
10-01-2007, 14:36 
 
Leute, ich bedanke mich bei allen, die mir helfen wollten, aber ich hab jetzt endlich (nach 2 Tagen^^) das Problem gelöst...
Ich hab einfach nen kleinen Fehler bei der Methode __sleep() gemacht, und schon hat das Serialisieren net gefuntzt...
Naja, trotzdem danke an alle, Thread kann wohl geschlossen werden!

Edit:
Original geschrieben von TobiaZ
Dann verzichte aufs serialisieren. ;)

Schon klar, dass es bei PHP 5 net mehr nötig is, aber das is jetzt ja nur mal ne Testumgebung, die ich auf meinem Rechner hab, aber ich hab eben keinen Schimmer, ob ich, wenn ich das ganze online stelle auch PHP 5 zur Verfügung hab!

 
ghostgambler
10-01-2007, 16:08 
 
Original geschrieben von bones
Leute, ich bedanke mich bei allen, die mir helfen wollten, aber ich hab jetzt endlich (nach 2 Tagen^^) das Problem gelöst...
Ich hab einfach nen kleinen Fehler bei der Methode __sleep() gemacht, und schon hat das Serialisieren net gefuntzt...
Genau das hatte ich geahnt...

Schon klar, dass es bei PHP 5 net mehr nötig is, aber das is jetzt ja nur mal ne Testumgebung, die ich auf meinem Rechner hab, aber ich hab eben keinen Schimmer, ob ich, wenn ich das ganze online stelle auch PHP 5 zur Verfügung hab!
die __sleep-Methode gibt es erst seit php-Version 5, das ist dir bewusst?!

und wenn dein Hoster dir kein php5 m. mysql5 anbietet, wechsel den Hoster ... das ist schon fast ein Grund für fristlose Kündigung :p

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:10 Uhr.