здравствуйте. пишу скрипт для приложения confbridge входящий в asterisk для мониторинга участников. на данный момент информация берется через AMI и отображается примерно так. Conference: 1 CallerIDNum: 202 CallerIDName: User2 Channel: SIP/202-00000022 Admin: No MarkedUser: No WaitMarked: No EndMarked: No Waiting: No Muted: No AnsweredTime: 12 ListItems: 1 мне нужно, чтобы все эти строчки сохранить в отдельные переменные и вывести только CallerIDNum. помогите пожалуйста как это лучше сделать? Код (PHP): <?php $ami = fsockopen("127.0.0.1", 5038, $errno, $errstr); if (!$ami) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($ami, "Action: Login\r\nUsername: monast_user\r\nSecret: asteriskami\r\nEvents: off\r\n\r\n"); fwrite($ami, "Action: ConfbridgeList\r\nConference: 1\r\n\r\n"); sleep(1); $record = fread($ami,1024); $record = explode("\r\n", $record); echo "<META HTTP-EQUIV=Refresh CONTENT=\"20\">"; echo "<table border=\"1\" style='color: black;'>"; foreach($record as $value){ if(!strlen(stristr($value,'Asterisk'))>0 && !strlen(stristr($value,'Response'))>0 && !strlen(stristr($value,'Message'))>0 && !strlen(stristr($value,'Event'))>0 && strlen(strpos($value,' '))>0) php_table($value);; } echo "</table>"; fclose($ami); } function php_table($value){ $row1 = true; $value = explode(" ", $value); foreach($value as $field){ if($row1){ echo "<tr><td>".$field."</td>"; $row1 = false; } else{ echo "<td>".$field."</td></tr>"; $row1 = true; } } } ?> спасибо. PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
http://sandbox.onlinephpfunctions.com/code/a56b27ea7859a6ea ... af77355aea Код (PHP): $text = <<<TXT Conference: 1 CallerIDNum: 202 CallerIDName: User2 Channel: SIP/202-00000022 Admin: No MarkedUser: No WaitMarked: No EndMarked: No Waiting: No Muted: No AnsweredTime: 12 ListItems: 1 TXT; $params = []; foreach (explode("\n", $text) as $str) { $str_parts = explode(":", $str); $params[$str_parts[0]] = trim($str_parts[1]); } var_export($params); Результат работы: Код (Text): array ( 'Conference' => '1', 'CallerIDNum' => '202', 'CallerIDName' => 'User2', 'Channel' => 'SIP/202-00000022', 'Admin' => 'No', 'MarkedUser' => 'No', 'WaitMarked' => 'No', 'EndMarked' => 'No', 'Waiting' => 'No', 'Muted' => 'No', 'AnsweredTime' => '12', 'ListItems' => '1', ) Надеюсь дальше разберётесь, что делать
извените, несовсем понял. мне нужно, чтобы значение переменной CallerIDNum выводилось на странице, их может быть несколько, взависимости сколько участников на данный момент в конференции. вообще максимум мне нужны две переменные, CallerIDNum и Channel. значение первой мне нужно вывести на страницу, а вторую использовать в функциах типа отключения микрофона и выкидывания. спасибо
Ууууу как плохо с теорией. Я же разжевал, осталось переварить. В конец моего кода вставьте вместо var_export Код (PHP): echo $params["CallerIDNum"], "<br>", $params["Channel"];
как это можно связать с этим кодом? Код (Text): <?php $ami = fsockopen("127.0.0.1", 5038, $errno, $errstr); if (!$ami) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($ami, "Action: Login\r\nUsername: monast_user\r\nSecret: asteriskami\r\nEvents: off\r\n\r\n"); fwrite($ami, "Action: ConfbridgeList\r\nConference: 1\r\n\r\n"); sleep(1); $record = fread($ami,1024); $record = explode("\r\n", $record); echo "<META HTTP-EQUIV=Refresh CONTENT=\"20\">"; echo "<table border=\"1\" style='color: black;'>"; foreach($record as $value){ if(!strlen(stristr($value,'Asterisk'))>0 && !strlen(stristr($value,'Response'))>0 && !strlen(stristr($value,'Message'))>0 && !strlen(stristr($value,'Event'))>0 && strlen(strpos($value,' '))>0) php_table($value);; } echo "</table>"; fclose($ami); } function php_table($value){ $row1 = true; $value = explode(" ", $value); foreach($value as $field){ if($row1){ echo "<tr><td>".$field."</td>"; $row1 = false; } else{ echo "<td>".$field."</td></tr>"; $row1 = true; } } } ?>
Ну если вы из своего сокета читаете тот текст, который привели, то используйте тот же метод на нём. Посмотрите, что читается из этого сокета. Я вам решил задачу
при вызове моей функции, на странице отображается тот текст который я писал выше, мне надо чтобы все эти строчки были в переменных
я не понял в чем тут проблема, помогите пожалуйста. Код (Text): <?php $ami = fsockopen("127.0.0.1", 5038, $errno, $errstr); if (!$ami) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($ami, "Action: Login\r\nUsername: monast_user\r\nSecret: asteriskami\r\nEvents: off\r\n\r\n"); fwrite($ami, "Action: ConfbridgeList\r\nConference: 1\r\n\r\n"); sleep(1); $record = fread($ami,1024); $record = explode("\r\n", $record); echo "<META HTTP-EQUIV=Refresh CONTENT=\"20\">"; echo "<table border=\"1\" style='color: black;'>"; foreach($record as $value){ if(!strlen(stristr($value,'Asterisk'))>0 && !strlen(stristr($value,'Response'))>0 && !strlen(stristr($value,'Message'))>0 && !strlen(stristr($value,'Event'))>0 && strlen(strpos($value,' '))>0) //php_table($value);; } $text = <<<TXT Conference CallerIDNum CallerIDName Channel Admin MarkedUser WaitMarked EndMarked Waiting Muted AnsweredTime ListItems TXT; $params = []; foreach (explode("\n", $text) as $str) { $str_parts = explode(":", $str); $params[$str_parts[0]] = trim($str_parts[1]); } echo $params["CallerIDNum"], "<br>", $params["Channel"]; echo "</table>"; fclose($ami); }
Проблема одна: ваши нулевые знания php, и желание чегой-то там творить. Что возвращается из сокета? Код (Text): $record = explode("\r\n", $record); замените на Код (Text): $record = explode("\r\n", $record); var_export($record); die; и покажите, чего выведет. А тему, по ходу, надо переносить в "сделайте за меня"
здравствуйте. вот вывод что возвращает сокет. array ( 0 => 'Asterisk Call Manager/2.7.0', 1 => 'Response: Success', 2 => 'Message: Authentication accepted', 3 => '', 4 => 'Response: Success', 5 => 'EventList: start', 6 => 'Message: Confbridge user list will follow', 7 => '', 8 => 'Event: ConfbridgeList', 9 => 'Conference: 1', 10 => 'CallerIDNum: 202', 11 => 'CallerIDName: User2', 12 => 'Channel: SIP/202-0000002d', 13 => 'Admin: No', 14 => 'MarkedUser: No', 15 => 'WaitMarked: No', 16 => 'EndMarked: No', 17 => 'Waiting: No', 18 => 'Muted: No', 19 => 'AnsweredTime: 16', 20 => '', 21 => 'Event: ConfbridgeListComplete', 22 => 'EventList: Complete', 23 => 'ListItems: 1', 24 => '', 25 => '', ) как из кода видно, я обнулил все события которые не косаются конференции, и оставил только те которые непосредственно отвечают за конфу. эти значения не статические, они все время меняются
Код (PHP): $params = []; foreach ($record as $r) { $str_parts = explode(":", $r); // Строки без двоеточия нам не интересны if (count($str_parts) < 2) continue; $params[$str_parts[0]] = trim($params[$str_parts[1]]); } echo $params["CallerIDNum"], "<br>", $params["Channel"]; Как видите, практически тот же код. Учите php, прежде чем возиться с сокетами и прочей фигнёй. А то копипастите код, а потом даже элементарные изменения внести не можете. Если и сейчас не понимаете, то я умываю руки.
вот вродебы сделал как надо, но почемуто не работает. Код (Text): <?php $ami = fsockopen("127.0.0.1", 5038, $errno, $errstr); if (!$ami) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($ami, "Action: Login\r\nUsername: monast_user\r\nSecret: asteriskami\r\nEvents: off\r\n\r\n"); fwrite($ami, "Action: ConfbridgeList\r\nConference: 1\r\n\r\n"); sleep(1); $record = fread($ami,1024); $record = explode("\r\n", $record); $params = []; foreach ($record as $r) { $str_parts = explode(":", $r); if (count($str_parts) < 2) continue; $params[$str_parts[0]] = trim($params[$str_parts[1]]); } echo $params["CallerIDNum"], "<br>", $params["Channel"]; fclose($ami); } ?>
Пишет ли ошибки? Какие? Включены ли ошибки? Какая версия php (мой код на php 5.4 минимум рассчитан, ниже - надо заменить $params = [] на $params = array ()) Добавлено спустя 18 минут 39 секунд: А, я опечатался. Код (Text): $params[$str_parts[0]] = trim($params[$str_parts[1]]); замените Код (Text): $params[$str_parts[0]] = trim($str_parts[1]);
Parse error: syntax error, unexpected T_STRING in Z:\home\luwrainn.org\www\confbridge1.php on line 13. строка 12 у меня Код (Text): foreach ($record as $r) {
все вродебы разобрался, только одна проблемма, если в конференции больше одного участника скрипт показывает только одного последнего.
Ну блин, напишите уже алгоритм, или заплатите кому-нибудь. Но это вам во фриланс. Я и так за вас пол работы бесплатно сделал.