Квартиры, дома, земельные участки Краснодарского края без посредников. Объявления собственников недвижимости.
Реклама здесь
Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Генерация XML запроса к серверу и парсинг ответа

При анализе чужих кодов можно наблюдать интересные приемы программирования. На мой взгляд самое лучшее обучение, это учиться у мастеров своего дела.

Анализируя код биржи статей Liex, я обратил внимание на простой и компактный код, с помощью которого система обращается на сервер с помощью POST запроса, передает XML запрос, получает XML ответ, разбирает его и сохраняет в файл. Все красиво, компактно и понятно. Удалил немного лишнего и добавил коментарии:


<?php
// Генерация XML запроса к серверу (подсмотрено у Liex)
$xml "<?xml version=\"1.0\" encoding=\"Windows-1251\"?>\n<xmlRequest>\n";
$xml .= "\t<host>$host</host>\n";
$xml .= "\t<script md5=\"".strtoupper(md5_file(__FILE__))."\"/>\n"
if (
file_exists($index_page)&&(is_file($index_page)))
    
$xml .= "\t<index md5=\"".strtoupper(md5_file($index_page))."\"/>\n";
foreach(
$local_base as $id=>$_md5)
    
$xml .= "\t<article id=\"$id\" md5=\"$_md5\"/>\n";
$xml .= '</xmlRequest>';

// Генерация и отправка HTTP запроса к серверу
$content 'data='.urlencode($xml);
$content_length strlen($content);
unset(
$xml);

foreach (
$srvs as $serv => $path) {
   
$query "POST $path HTTP/1.0\r\n";
   
$query .= "Host: $serv\r\n";
   
$query .= "Connection: close\r\n";
   
$query .= "Content-Type: application/x-www-form-urlencoded\r\n";
   
$query .= "Content-Length: $content_length\r\n";
   
$query .= "\r\n";
   
$query .= $content;

   
$fh fsockopen($serv80$errno$errstr10);
   if (!
$fh) continue;
   
stream_set_timeout($fh20);

   
fwrite($fh$query);

   if (
feof($fh)) continue;
   
$line fgets($fh);
   if (!
$line) continue;
   
$code split(' '$line);
   if (!
$code || count($code) < 2) continue;
   
$code $code[1];
   if (
substr($code01) != '2')    continue;

   while(!
feof($fh)) {
       
$line fgets($fh);
       if (
$line == "\r\n") break;
   }
   if (!
feof($fh)) {
       
$conn_ok true;
       break;
   }
}
unset(
$content);
unset(
$query);

if ((!isset(
$conn_ok) || !$conn_ok) && !is_file($index_page))
    exit(
"Error occurred:\nCan't connect to server");

// xml парсинг ответа
$xml_parser xml_parser_create('ISO-8859-1');
xml_parser_set_option($xml_parserXML_OPTION_CASE_FOLDING0);
xml_set_element_handler($xml_parser'start_element_handler''end_element_handler');
xml_set_character_data_handler($xml_parser'character_data_handler');
while (!
feof($fh))
    
xml_parse($xml_parserfread($fh8192));
fclose($fh);
xml_parser_free($xml_parser);

?>
Скопировать в буфер
Crema Кофе lavazza.

© Copyright 2008-2012 by KDG