Fehlermeldung: Wie soll ich denn das sonst machen?!

casr

Mitglied
Mein PHP-Contest: Speichern von XML-Daten in einer Session

Welcher Crack schafft es, folgende 2 PHP-Fetzen zum laufen zu bringen? Es geht immer noch um das Speichern von XML-Daten (DOM oder SimpleXml ist egal) in einer Session!

Zu gewinnen gibts ein herzliches Dankeschön!

Der Code:

File TestEins.php
PHP:
 <?PHP
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>TestEins</title>
</head>
<body>
<?PHP
	$xml = simplexml_load_file("test.xml");
	$_SESSION['xml'] = $xml;
foreach($xml->children() as $event){
 
echo "{$event->Name} <br>";
}
?>
<a href="TestZwei.php" target="_self">Link</a>
</body>
</html>
...und die zweite Seite TestZwei.php...
PHP:
 <?PHP
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
</head>
<body>
<?php
$xml = $_SESSION['xml'];
foreach($xml->children() as $event){
echo "{$event->Name} <br>";
}
?>
</body>
</html>

Der Aufruf der zweiten Seite über den Link in der ersten Seite produziert mit diesem Code folgende Fehlermeldung, und dies etwa 20 mal hintereinander:

HTML:
 Warning: session_start() [function.session-start]: Node no longer exists in c:\wamp\www\Test\TestZwei.php on line 2

Diesen Fehler werde ich dann nicht mehr los, ehe ich nicht alles Session-Dateien aus dem temp Verzeichnis gelöscht habe. Wenn ich anstatt des SimpleXml-Dokuments einen "kurzen" String in der Session speichere, dann läufts ohne Probleme. Also stimmen die Abläufe grundsätzlich, und die Session funktioniert auch.

Als ihr schlauen Cracks: Wie speichere ich ein XML in der Session? Muss ich es erst Verstringen? Und wie mach ich das?

Grüsse Casr
 
Zuletzt bearbeitet:
...weil die Welt nicht so einfach ist wie sie scheint.

Das ist, wie man an den vielen Test-Benennungen erkennen kann, nur ein Test. In der eigentlichen Applikation wird das XML aus einer Datenbankabfrage aufgebaut, und zwar für jeden Besucher individuell. Danach browst der Besucher nur noch auf seinem XML rum, ohne die DB zu belästigen. Dazu will ich nicht noch eine komplizierte Zuordnung von Files zu Besuchern, und lästiges Files löschen wenn nicht mehr gebraucht implementieren, sondern dies der Session überlassen.

Nun aber genug der lange Worte: serialize() und unserialize() funktioniert ebenfalls nicht. Gleiche Fehlermeldung wie vorhine, einfach mit unserialize():

HTML:
 Warning: unserialize() [function.unserialize]: Node no longer exists in c:\wamp\www\krempel.ch\TestZwei.php on line 13

Also, hat jemand eine Lösung zum speichern von XML-Daten in der Session?

Grüsse Casr
 
so wie ich das sehe ist das kein Session Problem sondern ein Problem von serialize() / unserialize()
PHP:
<?
	echo '<pre>';
	$xml = simplexml_load_file('test.xml');
	$ser_xml = serialize($xml);
	var_dump($xml);
	echo "\n";
	echo $ser_xml;
	echo "\n";
	var_dump(unserialize($ser_xml));
	echo '</pre>';
?>
auch bei dem Script bekommst du eine Fehlermeldung von unserialze(). Ich vermute das liegt daran das im SimpleXMLElement Objekt mehrere SimpleXMLElement Objekte verschachtelt sind. (ist aber nur ne Vermutung, das müsste man erst nochmal ordentlich testen)
 
Zurück