Здравствуйте. Помогите пожалуйста сделать вывод каналов, которые сейчас транслируют (NGINX RTMP MODULE). Я новичок в PHP. У модуля есть страница статистики xml (кто вещает, когда, сколько и т.д. и т.п.). Пытался обрабатывать XML - в итоге пустая страница. Код обработки: PHP: <? include 'rtmpset.php'; $xml->rtmp[0]->nclients; foreach ($xml->rtmp as $info) { echo $info[nclients]; } ?> Файл rtmpset.php: PHP: <? $xml = simplexml_load_file(rawurlencode('адрес rtmp сервера/stat.xml')); ?> но ничего этот код не выводит. Помогите пожалуйста.
@boomrush может короткий синтаксис php тегов выключен? Исходный код страницы в браузере смотрел? Вместо <? ?> используй <?php ?>. https://secure.php.net/manual/ru/language.basic-syntax.phptags.php А дальше как советовали выше.
Проверил. Выводит все правильно, но мне извлечь надо из xml отдельную строчку. object(SimpleXMLElement)#1 (12) { ["nginx_version"]=> string(5) "1.8.0" ["nginx_rtmp_version"]=> string(5) "1.1.4" ["compiler"]=> string(42) "gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) " ["built"]=> string(20) "Jul 31 2016 22:01:48" ["pid"]=> string(4) "5162" ["uptime"]=> string(5) "94626" ["naccepted"]=> string(2) "88" ["bw_in"]=> string(1) "0" ["bytes_in"]=> string(9) "182418715" ["bw_out"]=> string(1) "0" ["bytes_out"]=> string(9) "133957527" ["server"]=> object(SimpleXMLElement)#2 (1) { ["application"]=> array(2) { [0]=> object(SimpleXMLElement)#4 (2) { ["name"]=> string(4) "live" ["live"]=> object(SimpleXMLElement)#6 (1) { ["nclients"]=> string(1) "0" } } [1]=> object(SimpleXMLElement)#3 (2) { ["name"]=> string(3) "hls" ["live"]=> object(SimpleXMLElement)#6 (1) { ["nclients"]=> string(1) "0" } } } } } --- Добавлено --- тоже самое.
Вероятнее всего в твоем xml файле нет тега rtmp. Соответственно ты ничего и не видишь, ибо freach сработает только в том случае, когда в массиве будет хотя бы один элемент
Он есть. Вот весь исходный код страницы stat.xml: Код (Text): <?xml version="1.0" encoding="utf-8" ?> <?xml-stylesheet type="text/xsl" href="stat.xsl" ?> <rtmp> <nginx_version>1.8.0</nginx_version> <nginx_rtmp_version>1.1.4</nginx_rtmp_version> <compiler>gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) </compiler> <built>Jul 31 2016 22:01:48</built> <pid>5162</pid> <uptime>150532</uptime> <naccepted>93</naccepted> <bw_in>0</bw_in> <bytes_in>182588539</bytes_in> <bw_out>0</bw_out> <bytes_out>133960056</bytes_out> <server> <application> <name>live</name> <live> <nclients>0</nclients> </live> </application> <application> <name>hls</name> <live> <nclients>0</nclients> </live> </application> </server> </rtmp> --- Добавлено --- я как раз от туда и брал код
@boomrush смотри исходный код браузера, там видно иерархию в var_dump PHP: SimpleXMLElement::__set_state(array( 'nginx_version' => '1.8.0', 'nginx_rtmp_version' => '1.1.4', 'compiler' => 'gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ', 'built' => 'Jul 31 2016 22:01:48', 'pid' => '5162', 'uptime' => '150532', 'naccepted' => '93', 'bw_in' => '0', 'bytes_in' => '182588539', 'bw_out' => '0', 'bytes_out' => '133960056', 'server' => SimpleXMLElement::__set_state(array( 'application' => array ( 0 => SimpleXMLElement::__set_state(array( 'name' => 'live', 'live' => SimpleXMLElement::__set_state(array( 'nclients' => '0', )), )), 1 => SimpleXMLElement::__set_state(array( 'name' => 'hls', 'live' => SimpleXMLElement::__set_state(array( 'nclients' => '0', )), )), ), )), )) Вот всё видно, утка в зайце, в утке яйцо, в яйце server, в server application, в application массив, в элементе массива live, в live nclients вот и иголка! PHP: // $xmlstr тут xml текст $xml = new SimpleXMLElement($xmlstr); foreach ($xml->server->application as $tag) { echo "nclients: ".$tag->live->nclients->__toString()."<br>"; }