ugrás a tartalomhoz

Xml lehívási távoli gépről és elemzése

Anonymous · 2006. Jún. 28. (Sze), 12.27
Üdv!

Lenne egy ksi gondom xml kezeléssel kapcsolatban:

itt a php kód egy része:

és az a bajom hogy a szerver átad egy ilyen paramétert mikor lehívom
a stats.xml-t

HTTP/1.1 200 OK
Server: WoWEmu
Connection: Close
Content-length: 7601
Content-type: text/xml

nos ez eddig ok is, ezt meg próbálom kiszedni a preg_replace-val,
de a \n vagy is az üres sorok bennmaradnak és így sajnos nem elemzni...
  1. <?php  
  2.   
  3. $server = "169.254.201.102";  
  4.   
  5. $f = @fsockopen($server, 8080, $err$errstr, 5);  
  6.   
  7. $query = "GET /stats.xml\r\n";  
  8. $query .= "Host: www.php.net\r\n\r\n";  
  9.   
  10. function abc() {  
  11. global $f;  
  12. global $b;  
  13. while ($lap = fgets($f, 1024)) {  
  14. $b .= $lap;  
  15. }  
  16. }  
  17.   
  18. if ($f) {  
  19.   
  20. fwrite($f$query);  
  21.   
  22.   
  23.   
  24. abc();  
  25.   
  26. $c = NULL;  
  27.   
  28.   
  29.   
  30. $b = preg_replace("/Server([ a-zA-Z0-9\.\:]*)/"$c$b);  
  31. $b = preg_replace("/HTTP\/([ a-zA-Z0-9\.\:]*)/"$c$b);  
  32. $b = preg_replace("/Connection([ a-zA-Z0-9\.\:]*)/"$c$b);  
  33. $b = preg_replace("/Content-length([ a-zA-Z0-9\.\:]*)/"$c$b);  
  34. $b = preg_replace("/Content-type([ a-zA-Z0-9\.\:\/]*)/"$c$b);  
  35.   
  36.   
  37. }  
  38.   
  39. $parser = xml_parser_create();  
  40.   
  41. xml_set_element_handler($parser"start_tag""end_tag");  
  42. xml_set_character_data_handler($parser"chd_tag");  
  43. xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);  
  44.   
  45.   
  46.   
  47. print $xmla = $b;  
  48.   
  49. $xml = $xmla;  
  50.   
  51.   
  52.   
  53. xml_parse($parser$xml);  
  54.   
  55. /* .... */  
  56.   
  57. ?>  
Szerintetek hogy tudnám elérni hogy elemezze?
vagy pedig kivenni azt az infót amit a szerver küld?


Előre is kösszönöm...
 
1

CURL

Délczeg Gábor · 2006. Jún. 28. (Sze), 14.28
Szia,

a CURL nem volna jobb erre?
Beállítod neki, hogy nem akarsz a response -ban http headert visszakapni és le van a gond róla.... ;-)
2

két sorvége=üres sor

TeeCee · 2006. Jún. 28. (Sze), 15.35
Hali!

Úgy látom, hogy kitörlöd a nem kellő sorokat. Tehát:
1.) esetleg ha fix számú sort törölsz, akkor nem kell preg_replace, hanem számlálóval számolod, hogy mennyitől kezdve van értelmes anyagod.
2.) ha így üres sort állítasz be, akkor a két egymásutáni sorgéve egyre cserélése meg azt eredményezi, hogy egy üres sort kitörölsz ;-)
3.) vagy úgy nézem, hogy a stream-get_line az sorvége-jel nélkül szedi a sorokat, szóval: szeded ezzel és $b .= $lap; helyett $b .= $lap."\r\n"; (ha \r\n a sorvége), így meg eleve nem is lesz üres sorod, mert amit visszakap, az egy nullahosszú string, az meg egy nagy semmise :)

Mindenesetre, ha a $b tekintélyes méretű, akkor IMHO erőforráspazarlás egy regexpet ráeresztni, nemhogy 5-öt...

Remélem, tudtam segíteni :o)