Xml lehívási távoli gépről és elemzése
Ü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...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...
■ 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);
/* .... */
?>
vagy pedig kivenni azt az infót amit a szerver küld?
Előre is kösszönöm...
CURL
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.... ;-)
két sorvége=üres sor
Ú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)