Ответов: 8 Просмотров: 343
|
Такая проблема:
есть удаленный сервер к котором отправляю сокетами запросы и получаю ответы в xml.
Вот пример ответа:
CODE ( htmlphp):
скопировать код в буфер обмена
<?xml version='1.0' encoding='Windows-1251' standalone='yes'?><XML><Result>Ok</Result><Error></Error><Remark></Remark><Data><Movies><Movie ID='343'><Name><![CDATA[Мальчики - налетчики]]></Name><Duration Duration='110'>1ч 50мин</Duration><Remark><![CDATA[]]></Remark><Picture><![CDATA[]]></Picture><Properties></Properties></Movie><Movie ID='339'><Name><![CDATA[Пила 3D]]></Name><Duration Duration='90'>1ч 30мин</Duration><Remark><![CDATA[]]></Remark><Picture><![CDATA[]]></Picture><Properties></Properties></Movie><Movie ID='341'><Name><![CDATA[Союз зверей 3D]]></Name><Duration Duration='90'>1ч 30мин</Duration><Remark><![CDATA[]]></Remark><Picture><![CDATA[]]></Picture><Properties></Properties></Movie></Movies></Data></XML>
Вот функция для его получения и обработки:
CODE ( htmlphp):
скопировать код в буфер обмена
function GetMovies(){ $fmov = fsockopen("192.168.200.1", 9194, $errno, $errstr, 30); if(!$fmov){ echo "$errstr ($errno)<br> "; } else{ $wait = true; $query = "запрос к серверу"; stream_set_blocking($fmov, 0); fwrite($fmov, $query); while (!feof($fmov)){ $r = fgets($fmov); //echo $r; $data = substr($r, 11); //echo $data; $xml = simplexml_load_string($data); foreach($xml->Data->Movies->Movie as $movie){ //print_r($movie); foreach($movie->Name as $name){ echo $name."<br>"; } } if (!strcmp($r, "")){ if (!$wait){ break; } } else{ $wait = false; } } fclose($fmov); } }
В результате работы функции получаю огромное количество строк вида "Warning: Invalid argument supplied for foreach() in X:\home\kino.new\www\common.php on line 53" (строка 53: foreach($xml->Data->Movies->Movie as $movie){)
и где-то в конце страницы, перед последним предупреждением получаю необходимый ответ с выводом фильмов. Обработка функции занимает очень много времени.
Не могу понять в чем проблема!
Заранее спасибо за любую помощь. |