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...

<?php

$server = "169.254.201.102";

$f = @fsockopen($server, 8080, $err, $errstr, 5);

$query = "GET /stats.xml\r\n";
$query .= "Host: www.php.net\r\n\r\n";

function abc() {
global $f;
global $b;
while ($lap = fgets($f, 1024)) {
$b .= $lap;
}
}

if ($f) {

fwrite($f, $query);



abc();

$c = NULL;



$b = preg_replace("/Server([ a-zA-Z0-9\.\:]*)/", $c, $b);
$b = preg_replace("/HTTP\/([ a-zA-Z0-9\.\:]*)/", $c, $b);
$b = preg_replace("/Connection([ a-zA-Z0-9\.\:]*)/", $c, $b);
$b = preg_replace("/Content-length([ a-zA-Z0-9\.\:]*)/", $c, $b);
$b = preg_replace("/Content-type([ a-zA-Z0-9\.\:\/]*)/", $c, $b);


}

$parser = xml_parser_create();

xml_set_element_handler($parser, "start_tag", "end_tag");
xml_set_character_data_handler($parser, "chd_tag");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);



print $xmla = $b;

$xml = $xmla;



xml_parse($parser, $xml);

/* .... */

?>
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)