ugrás a tartalomhoz

Objektum típus szerializálás után már nem ugyanaz?

janoszen · 2007. Szep. 12. (Sze), 14.53
Sziasztok,

a következő furcsaságra bukkantan. Betöltök egy DOMDocument-et majd egy DOMXPath-t. Ha a DOMXPath-t szerializálom és töltöm vissza, azt mondja hogy invalid ... context. Ha a DOMDocumentet szeralizálom, ezt a hibát kapom:

DOMXPath::__construct() expects parameter 1 to be DOMDocument, object given


A PHP 5 nem tartja meg az objektumok típusát szerializáson keresztül?

J
 
1

Próbakód

janoszen · 2007. Szep. 12. (Sze), 14.58
Itt van a lecsupaszított kód:
  1. $configfile = dirname(__FILE__) . "/config.xml"  
  2. $configcache = dirname(__FILE__) . "/config.ser";  
  3.   
  4. if (file_exists($configcache) && file_exists($configFile) && (filemtime($configFile) < filemtime($configcache))) {  
  5.     $doc = unserialize(file_get_contents($configcache));  
  6.     $xpath = new DOMXPath(self::$doc);  
  7. else {  
  8.     $doc = new DOMDocument();  
  9.     $doc->load($configFile);  
  10.       
  11.     $xpath = new DOMXPath(self::$doc);  
  12.           
  13.     file_put_contents($configcache, serialize(self::$xpath));  
  14. }  
2

Annal rosszabb a helyzet...

burci · 2007. Szep. 12. (Sze), 16.15
En tudasom szerint semmilyen dom kozeli dolgot nem tud a php5 serializalni.
  1. $dom = new DomDocument();  
  2. $dom->loadXML("<root><test>1</test></root>");  
  3.   
  4. echo serialize( $dom ), "\n";  
  5. // eredmenye: O:11:"DOMDocument":0:{}  
  6.   
  7. echo $dom->saveXML();  
  8. // eredmenye: <?xml version="1.0"?><root><test>1</test></root>  
Ugyanez tortenik xpath-al is.
3

Király :S

janoszen · 2007. Szep. 12. (Sze), 18.18
Köszi az infót, ez nagyon gáz mert gyakorlatilag nem lehet cache-t építeni rá, max ha saját XML parzert építek.
4

RTFM ;)

Hodicska Gergely · 2007. Szep. 13. (Cs), 08.05
Note: It is not possible to serialize PHP built-in objects.



Üdv,
Felhő
5

:S

janoszen · 2007. Szep. 13. (Cs), 09.26
Na igen, pont ez a problémám. Kellene cache-elnem azt a nyamvadt XML fájlt valahogy.
6

mentsd el azt

Hojtsy Gábor · 2007. Szep. 13. (Cs), 09.48
Mentsd el az XML-t.
7

Adatszerkezet szerializalas

zmb · 2007. Szep. 13. (Cs), 10.13
Hat, en aztat szoktam, h XML-bol felhuzom azt az adatszerkezetet, amit hasznalni akarok, majd ezt az adatszerkezetet szerializalom le, es rantom be ujra. Igy csak akkor kell az XML-t ujra bejarni, ha annak a tartalma megvaltozott.
8

XPath

janoszen · 2007. Szep. 13. (Cs), 10.46
Igen, ez jó is lenne, ha nem akarnék XPath-t használni. Szvsz nem a file olvasása a sok, hanem az XML parzolása és az XPath... nem tudom, egyelőre marad így.
9

konkrét adat cachelése?

Hodicska Gergely · 2007. Szep. 13. (Cs), 21.13
Konkrét esetet persze nem ismerem, de gondolom végülis valamilyen adatot akarsz kinyerni az XML-ből, bármikor chachelheted ezt az adatot, ha ténylegesen úgy tűnik, hogy a rendszeredben ez a szűk kersztmetszet.


Üdv,
Felhő
10

Kis optimalizálás

janoszen · 2007. Szep. 13. (Cs), 22.33
Nem olyan nagyon vészes, mert ez egy kis optimalizálás lett volna a nagy rendszerben... lényeg, hogy a konfigurációs adatok egy XML fájlban tárolódnak és abból kéri le az illetékes osztály magának, amire szüksége van. Az adatok sokszínűségének köszönhetően és a programozás egyszerűsége érdekében XPath kifejezésekkel lehet ezt megtenni... ami CPU-t eszik. Nem sok, de szerettem volna kicsit tekerni rajta.