RE: PHP5, $_SESSION, DOM XML objects not returning value

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Are you f'ing kidding me?!

http://www.php.net/manual/en/ref.session.php

"Some types of data can not be serialized thus stored in sessions. It
includes resource variables or objects with circular references (i.e.
objects which passes a reference to itself to another object). "

L A M E !!!

This is absurd. There shouldn't be any reason I can't send a reference to
another object -- Especially a built in type! UGH.

> -----Original Message-----
> From: Daevid Vincent [mailto:daevid@xxxxxxxxxx] 
> Sent: Friday, September 30, 2005 3:02 PM
> To: php-general@xxxxxxxxxxxxx
> Subject:  PHP5, $_SESSION, DOM XML objects not returning value
> 
> I'm trying to store an array of DOM XML objects
> (http://www.php.net/manual/en/ref.dom.php) in a PHP5.0.3 
> $_SESSION array,
> but when I load the session back (and yes, I've declared my 
> class before the
> session_start()), I get these errors:
> 
> Warning: XMLRule::getValue() [function.getValue]: Invalid State Error 
> in /lockdown/includes/classes/rule_xml.class.php on line 74
> 
> Or
> 
> Warning: XMLRule::getValue() [function.getValue]: Invalid State Error 
> in /lockdown/includes/classes/rule_xml.class.php on line 81
> 
> And all the VALUES are empty, however *my* XMLRule class 
> array seems right
> otherwise. It's like PHP didn't serialize all of it's own DOM 
> XML objects
> (which are built in objects!!!)
> 
> Here are the pertinent parts of the classes and other code snippets.
> 
> ##############################################################
> ##############
> #####
> class XMLRule 
> {
> 	// for example 'is_username' XML tag would set $name = 
> 'Username'
>     protected $name = null;
> 
> 	// The reference pointer to the DOMNode, this is a wealth of
> information in itself.
> 	// look at the DOMNode class @
> http://www.php.net/manual/en/ref.dom.php
>     protected $DOMNode = null;
> 	
>     protected function __construct($DOMNode, $name, $id = null) 
> 	{
> 		$this->DOMNode = $DOMNode;
> 		$this->name = $name;
> 		$this->id = $id;
>     } //__construct()
> 
> 
> 	function getValue() 
> 	{
> 		//check for multiple values, such as a list of 
> names perhaps
> [#74]		if ($this->DOMNode->childNodes->length > 1)
> 		{
> 			foreach ($this->DOMNode->childNodes as 
> $tmpNode) 
> 				$tmpArray[] = $tmpNode->nodeValue;
> 			return $tmpArray;
> 		}
> 		else
> [#81]			return $this->DOMNode->nodeValue;
> 	}
> }
> 
> class is_username extends XMLRule
> {
> 	function __construct($DOMNode, $id = null) {
> parent::__construct($DOMNode, 'Username', $id); }
> }
> 
> class is_day extends XMLRule
> {
> 	function __construct($DOMNode, $id = null) {
> parent::__construct($DOMNode, 'Day', $id); }
> }
> 
> ...etc...
> 
> ##############################################################
> ##############
> #####
> 
> // IMPORTANT: You *MUST* declare the class *BEFORE* you call
> session_start(). 
> // If you run session_start() before the definition of the class, 
> // the session variables of the objects will be corrupted.
> // http://www.zend.com/phorum/read.php?num=3&id=36854&thread=36847
> 
> require_once('classes/rule_xml.class.php');
> 
> if (!isset($_SESSION['ruleArray']))
> {
> 	$XMLDOC = new DOMDocument();
> 	$XMLDOC->loadXML($xmlstring);
> 	
> 	$ruleArray = array();
> 	$i = 1;
> 	$or = 1;
> 	foreach($XMLDOC->firstChild->childNodes as $myNode)
> 	{
> 		if ($myNode->nodeName == 'and_conditions')
> 		{
> 			foreach($myNode->childNodes as $cNode)
> 			{
> 				$key = (string)($cNode->nodeName);
> 				//make a new instance of the node name'd
> class
> 				$ruleArray[$or][$i] = new 
> $key($cNode, $i); 
> 				$i++;
> 			}
> 			
> 			$or++; //begin new OR block
> 		} //if and_conditions
> 	} //foreach $myNode
> 	
> 	$_SESSION['ruleArray'] = serialize($ruleArray);
> }
> else $ruleArray = unserialize($_SESSION['ruleArray']);
> 
> I've tried this with the un/serialize and without. PHP5 is supposed to
> handle that for me, but just in case, I tried it anyways.
> 
> If I don't use the $SESSION, then things work fine and I have 
> my values.
> 
> I also tried to do this:
> 
> 	$_SESSION['ruleArray'] = $ruleArray;
> 	$ruleArray = $_SESSION['ruleArray'];
> 
> And surprisingly that works (although it doesn't solve my problem).
> 
> ##############################################################
> ##############
> #####
> Upon loading this back, this is what the array looks like in 
> either case
> (working or not)
> 
> Array
> (
>     [1] => Array
>         (
>             [1] => is_username Object
>                 (
>                     [name:protected] => Username
>                     [DOMNode:protected] => DOMElement Object
>                         (
>                         )
>                     [id:protected] => 1
>                 )
> 
>             [2] => is_day Object
>                 (
>                     [name:protected] => Day
>                     [DOMNode:protected] => DOMElement Object
>                         (
>                         )
>                     [id:protected] => 2
>                 )
> 
> 	...etc...
> 
> ##############################################################
> ##############
> #####
> 
> PHP Version 5.0.3
> 
> This program makes use of the Zend Scripting Language Engine:
> Zend Engine v2.0.3, Copyright (c) 1998-2004 Zend Technologies
>     with Zend Extension Manager v1.0.6, Copyright (c) 
> 2003-2004, by Zend
> Technologies
>     with Zend Optimizer v2.5.7, Copyright (c) 1998-2004, by Zend
> Technologies
> 
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
> 
> 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux