{"id":294144,"date":"2019-09-02T09:00:25","date_gmt":"2019-09-02T09:00:25","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=294144"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=294144","title":{"rendered":"\u0422\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u044b\u0439 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446 SQL Asterisk FreePBX (web-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a, \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0432 xml-\u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 Grandstream)"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\u0414\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  1) \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 SQL \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432:<\/p>\n<pre><code class=\"dos\">mysql -u freepbxuser -p \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f Enter \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.  \u041f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u043f\u0430\u0440\u043e\u043b\u044f \u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f Enter, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 MySQL: mysql&gt;_ <\/code><\/pre>\n<p>  2) \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b sql<\/p>\n<pre><code class=\"dos\">\u0412\u044b\u0432\u043e\u0434 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0431\u0430\u0437: SHOW DATABASES; \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0431\u0430\u0437\u0435: USE dbtest; \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0432\u0441\u0435\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437 \u0431\u0430\u0437\u044b: SHOW tables; \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b: SELECT * FROM page; \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b: DESCRIBE testtable; <\/code><\/pre>\n<p><a name=\"habracut\"><\/a><br \/>  3) \u041f\u043e\u0434\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a sql \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438:<\/p>\n<pre><code class=\"dos\">CREATE USER '\u0418\u041c\u042f-\u041d\u041e\u0412\u041e\u0413\u041e-\u041f\u041e\u041b\u042c\u0417\u041e\u0412\u0410\u0422\u0415\u041b\u042f'@'localhost' IDENTIFIED BY '!!!\u041f\u0410\u0420\u041e\u041b\u042c!!!'; GRANT ALL PRIVILEGES ON * . * TO '\u0418\u041c\u042f-\u041d\u041e\u0412\u041e\u0413\u041e-\u041f\u041e\u041b\u042c\u0417\u041e\u0412\u0410\u0422\u0415\u041b\u042f'@'localhost';  GRANT SELECT ON * . * TO '\u0418\u041c\u042f-\u041d\u041e\u0412\u041e\u0413\u041e-\u041f\u041e\u041b\u042c\u0417\u041e\u0412\u0410\u0422\u0415\u041b\u042f'@'localhost';  use mysql SELECT Host,User,Password FROM user;  UPDATE user SET Host='%' WHERE User='\u0418\u041c\u042f-\u041d\u041e\u0412\u041e\u0413\u041e-\u041f\u041e\u041b\u042c\u0417\u041e\u0412\u0410\u0422\u0415\u041b\u042f' AND Host='localhost'; FLUSH PRIVILEGES; <\/code><\/pre>\n<p>  4) \u0424\u043e\u0440\u043c\u0430\u0442 xml-\u0444\u0430\u0439\u043b\u0430:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt; &lt;AddressBook&gt; \t&lt;pbgroup&gt; \t\t&lt;id&gt;70&lt;\/id&gt; \t\t&lt;name&gt;User Manager Group&lt;\/name&gt; \t&lt;\/pbgroup&gt; \t&lt;Contact&gt; \t\t&lt;id&gt;760&lt;\/id&gt; \t\t&lt;FirstName&gt;\u0418\u0432\u0430\u043d\u043e\u0432&lt;\/FirstName&gt; \t\t&lt;LastName&gt;\u0418\u0432\u0430\u043d&lt;\/LastName&gt; \t\t&lt;Frequent&gt;0&lt;\/Frequent&gt; \t\t&lt;Phone type=\"Work\"&gt; \t\t\t&lt;phonenumber&gt;101&lt;\/phonenumber&gt; \t\t\t&lt;accountindex&gt;1&lt;\/accountindex&gt; \t\t&lt;\/Phone&gt; \t\t&lt;Group&gt;70&lt;\/Group&gt; \t\t&lt;Primary&gt;0&lt;\/Primary&gt; \t&lt;\/Contact&gt; &lt;\/AddressBook&gt; <\/code><\/pre>\n<p>  <b>\u0428\u0430\u0433 1. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 php-\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0447\u0442\u0435\u043d\u0438\u044f sql-\u0442\u0430\u0431\u043b\u0438\u0446\u044b Asterisk \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f xml-\u0444\u0430\u0439\u043b\u0430<\/b><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430 config.php \u0438 phonebook.php, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n<p>  \u0424\u0430\u0439\u043b config.php<\/p>\n<pre><code class=\"php\">&lt;?php return array( \"db\" =&gt; \"mysql:host=localhost;dbname=asterisk\", \"pb_file_gs\" =&gt; \"\/var\/www\/html\/phonebook\/phonebook.xml\", \"username\" =&gt; \"freepbxuser\", \/\/Mysql login \"password\" =&gt; \"\u043f\u0430\u0440\u043e\u043b\u044c freepbxuser\", \/\/Mysql password \"options\" =&gt; array(PDO::MYSQL_ATTR_INIT_COMMAND =&gt; 'SET NAMES utf8') ); <\/code><\/pre>\n<p>  \u0424\u0430\u0439\u043b phonebook.php<\/p>\n<pre><code class=\"php\">&lt;?php $config = include(\"db\/config.php\");  $db = new PDO($config[\"db\"], $config[\"username\"], $config[\"password\"], $config[\"options\"]);  \/\/ \u0414\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043a\u043d\u0438\u0433\u0438 $sql = \"SELECT userman_users.username, userman_users.displayname, contactmanager_group_entries.groupid FROM asterisk.userman_users, asterisk.contactmanager_group_entries, asterisk.contactmanager_groups WHERE contactmanager_group_entries.user = userman_users.id AND contactmanager_group_entries.groupid = contactmanager_groups.id\";   \/\/ \u0414\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043a\u043d\u0438\u0433\u0438 $sqlgrp = \"SELECT contactmanager_groups.name,contactmanager_groups.id FROM asterisk.contactmanager_groups\";  \/\/\u0413\u0440\u0443\u0437\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 $q = $db-&gt;prepare($sql); $q-&gt;execute(); $rows = $q-&gt;fetchAll();  \/\/\u0413\u0440\u0443\u0437\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 $q2 = $db-&gt;prepare($sqlgrp); $q2-&gt;execute(); $rows2 = $q2-&gt;fetchAll();  unlink($config[\"pb_file_gs\"]);  \/\/ \u0423\u0434\u0430\u043b\u0438\u043c \u0441\u0442\u0430\u0440\u044b\u0439 \u0444\u0430\u0439\u043b  $fp = fopen($config[\"pb_file_gs\"],\"w+\"); fputs($fp, '&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;&lt;AddressBook&gt;');  foreach($rows2 as $row) {         \/\/ \u041f\u0440\u043e\u0431\u0435\u0436\u0438\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044f\u043c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u044b fputs($fp,'&lt;pbgroup&gt;'); fputs($fp,'&lt;id&gt;'.$row['id'].'&lt;\/id&gt;'); fputs($fp,'&lt;name&gt;'.$row['name'].'&lt;\/name&gt;'); fputs($fp,'&lt;\/pbgroup&gt;'); }  foreach($rows as $row) {         \/\/ \u041f\u0440\u043e\u0431\u0435\u0436\u0438\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044f\u043c, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0432 XML \u0444\u0430\u0439\u043b \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430     if (strlen($row['username']) === 3) { \t\t$alln = $row['displayname']; \t\t\/\/if ($alln = '') #alln = $row['username']; \t\t$ln = strstr($alln, ' ', true); \t\t$fn = strstr($alln, ' ', false); \t\t$fn = trim($fn); \t\t$i++; \t\tfputs($fp, '&lt;Contact&gt; \t\t\t&lt;id&gt;'.$i.'&lt;\/id&gt; \t\t\t&lt;FirstName&gt;'.$ln.'&lt;\/FirstName&gt;                         &lt;LastName&gt;'.$fn.'&lt;\/LastName&gt;                         &lt;Phone type=\"Work\"&gt;                                    &lt;phonenumber&gt;'.$row['username'].'&lt;\/phonenumber&gt;                                    &lt;accountindex&gt;1&lt;\/accountindex&gt;                         &lt;\/Phone&gt; \t\t\t\t\t\t&lt;Group&gt;' \t\t\t\t\t\t.$row['groupid'].\t\t\t\t\t\t \t\t\t\t\t\t'&lt;\/Group&gt;             &lt;\/Contact&gt;         '); \t} } fputs($fp,'&lt;\/AddressBook&gt;'); fclose($fp); ?&gt; <\/code><\/pre>\n<p>  <b>\u0428\u0430\u0433 2. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d Grandstream \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u0438 \u0438\u0437 xml-\u0444\u0430\u0439\u043b\u0430<\/b><\/p>\n<p>  \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u00abPhonebook Management\u00bb \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 Grandstream GXP16xx \u0432 \u043f\u043e\u043b\u0435 \u00ab\u041f\u0443\u0442\u044c \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 XML\u00bb (Phonebook XML Server Path) \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0442\u044c \u0431\u0435\u0437 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<ol>\n<li>\u0412 \u043f\u043e\u043b\u0435 \u00abEnable Phonebook XML Download\u00bb \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u00abEnabled, use HTTP\u00bb<\/li>\n<li>\u0412 \u043f\u043e\u043b\u0435 \u00abPhonebook XML Server Path\u00bb \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 xml, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u00ab192.168.0.220\/phonebook\u00bb<\/li>\n<\/ol>\n<p>  \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e.<\/p>\n<p>  <b>\u0428\u0430\u0433 3. \u0421\u043e\u0437\u0434\u0430\u0435\u043c web-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u0438<\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/6j\/-p\/_u\/6j-p_ugxxm08bugu1jcstcav6ym.png\"><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b pb.php.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b.<\/p>\n<ol>\n<li>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437 xml-\u0444\u0430\u0439\u043b\u0430 \u0438 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432<\/li>\n<li>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440 \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b.<\/li>\n<\/ol>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0430\u0439\u043b config.php<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;html&gt;  &lt;style&gt; &lt;!-- \/* \u043d\u0430\u0448\u0430 HTML \u0442\u0430\u0431\u043b\u0438\u0446\u0430 *\/ table.sort{ \tborder-spacing:0em; \tmargin-bottom:1em; \tmargin-top:1em }  \/* \u044f\u0447\u0435\u0439\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b *\/ table.sort td{ \tborder:1px solid #CCCCCC; \tpadding:0.3em 1em }  \/* \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b *\/ table.sort thead td{ \tcursor:pointer; \tcursor:hand; \tfont-weight:bold; \ttext-align:center; \tvertical-align:middle }      tbody tr:hover {     background: #999999; \/* \u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 *\/     color: #FFFFFF; \/* \u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 *\/    }   \/* \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 *\/ table.sort thead td.curcol{ \tbackground-color:#999999; \tcolor:#FFFFFF } --&gt; &lt;\/style&gt;  &lt;script type=\"text\/javascript\"&gt;  initial_sort_id = 0; \/\/ \u043d\u043e\u043c\u0435\u0440 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043d\u0443\u043b\u044f initial_sort_up = 0; \/\/ 0 - \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u043d\u0438\u0437, 1 - \u0432\u0432\u0435\u0440\u0445 var sort_case_sensitive = false; \/\/ \u0447\u0443\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0432\u0442\u044c \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u043f\u0440\u0438 \u0441\u043e\u0442\u0440\u0438\u0440\u043e\u0432\u043a\u0435  function _sort(a, b) { \tvar a = a[0]; \tvar b = b[0]; \tvar _a = (a + '').replace(\/,\/, '.'); \tvar _b = (b + '').replace(\/,\/, '.'); \tif (parseInt(_a) &amp;&amp; parseInt(_b)) return sort_numbers(parseInt(_a), parseInt(_b)); \telse if (!sort_case_sensitive) return sort_insensitive(a, b); \telse return sort_sensitive(a, b); }  function sort_numbers(a, b) { \treturn a - b; }  function sort_insensitive(a, b) { \tvar anew = a.toLowerCase(); \tvar bnew = b.toLowerCase(); \tif (anew &lt; bnew) return -1; \tif (anew &gt; bnew) return 1; \treturn 0; }  function sort_sensitive(a, b) { \tif (a &lt; b) return -1; \tif (a &gt; b) return 1; \treturn 0; }  function getConcatenedTextContent(node) { \tvar _result = \"\"; \tif (node == null) { \t\treturn _result; \t} \tvar childrens = node.childNodes; \tvar i = 0; \twhile (i &lt; childrens.length) { \t\tvar child = childrens.item(i); \t\tswitch (child.nodeType) { \t\t\tcase 1: \/\/ ELEMENT_NODE \t\t\tcase 5: \/\/ ENTITY_REFERENCE_NODE \t\t\t\t_result += getConcatenedTextContent(child); \t\t\t\tbreak; \t\t\tcase 3: \/\/ TEXT_NODE \t\t\tcase 2: \/\/ ATTRIBUTE_NODE \t\t\tcase 4: \/\/ CDATA_SECTION_NODE \t\t\t\t_result += child.nodeValue; \t\t\t\tbreak; \t\t\tcase 6: \/\/ ENTITY_NODE \t\t\tcase 7: \/\/ PROCESSING_INSTRUCTION_NODE \t\t\tcase 8: \/\/ COMMENT_NODE \t\t\tcase 9: \/\/ DOCUMENT_NODE \t\t\tcase 10: \/\/ DOCUMENT_TYPE_NODE \t\t\tcase 11: \/\/ DOCUMENT_FRAGMENT_NODE \t\t\tcase 12: \/\/ NOTATION_NODE \t\t\t\/\/ skip \t\t\tbreak; \t\t} \t\ti++; \t} \treturn _result; }  function sort(e) { \tvar el = window.event ? window.event.srcElement : e.currentTarget;  \twhile (el.tagName.toLowerCase() != \"td\") el = el.parentNode;  \tvar a = new Array(); \tvar name = el.lastChild.nodeValue; \tvar dad = el.parentNode; \tvar table = dad.parentNode.parentNode; \tvar up = table.up; \/\/ no set\/getAttribute!  \tvar node, arrow, curcol; \tfor (var i = 0; (node = dad.getElementsByTagName(\"td\").item(i)); i++) { \t\tif (node.lastChild.nodeValue == name){ \t\t\tcurcol = i; \t\t\tif (node.className == \"curcol\"){ \t\t\t\tarrow = node.firstChild; \t\t\t\ttable.up = Number(!up); \t\t\t}else{ \t\t\t\tnode.className = \"curcol\"; \t\t\t\tarrow = node.insertBefore(document.createElement(\"span\"),node.firstChild); \t\t\t        arrow.appendChild(document.createTextNode(\"\")); \t\t\t\ttable.up = 0; \t\t\t} \t\t\tarrow.innerHTML=((table.up==0)?\"\u2193\":\"\u2191\")+\"\u00a0\"; \t\t}else{ \t\t\tif (node.className == \"curcol\"){ \t\t\t\tnode.className = \"\"; \t\t\t\tif (node.firstChild) node.removeChild(node.firstChild); \t\t\t} \t\t} \t}  \tvar tbody = table.getElementsByTagName(\"tbody\").item(0); \tfor (var i = 0; (node = tbody.getElementsByTagName(\"tr\").item(i)); i++) { \t\ta[i] = new Array(); \t\ta[i][0] = getConcatenedTextContent(node.getElementsByTagName(\"td\").item(curcol)); \t\ta[i][1] = getConcatenedTextContent(node.getElementsByTagName(\"td\").item(1)); \t\ta[i][2] = getConcatenedTextContent(node.getElementsByTagName(\"td\").item(0)); \t\ta[i][3] = node; \t}  \ta.sort(_sort);  \tif (table.up) a.reverse();  \tfor (var i = 0; i &lt; a.length; i++) { \t\ttbody.appendChild(a[i][3]); \t} }  function init(e) { \tif (!document.getElementsByTagName) return; \t \tif (document.createEvent) function click_elem(elem){ \t\tvar evt = document.createEvent(\"MouseEvents\"); \t\tevt.initMouseEvent(\"click\", false, false, window, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, elem); \t\telem.dispatchEvent(evt); \t}  \tfor (var j = 0; (thead = document.getElementsByTagName(\"thead\").item(j)); j++) { \t\tvar node; \t\tfor (var i = 0; (node = thead.getElementsByTagName(\"td\").item(i)); i++) { \t\t\tif (node.addEventListener) node.addEventListener(\"click\", sort, false); \t\t\telse if (node.attachEvent) node.attachEvent(\"onclick\", sort); \t\t\tnode.title = \"\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u043e\u043d\u043a\u0443\"; \t\t} \t\tthead.parentNode.up = 0; \t\t \t\tif (typeof(initial_sort_id) != \"undefined\"){ \t\t\ttd_for_event = thead.getElementsByTagName(\"td\").item(initial_sort_id); \t\t\tif (td_for_event.dispatchEvent) click_elem(td_for_event); \t\t\telse if (td_for_event.fireEvent) td_for_event.fireEvent(\"onclick\"); \t\t\tif (typeof(initial_sort_up) != \"undefined\" &amp;&amp; initial_sort_up){ \t\t\t\tif (td_for_event.dispatchEvent) click_elem(td_for_event); \t\t\t\telse if (td_for_event.fireEvent) td_for_event.fireEvent(\"onclick\"); \t\t\t} \t\t} \t} }  var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null; if (root){ \tif (root.addEventListener) root.addEventListener(\"load\", init, false); \telse if (root.attachEvent) root.attachEvent(\"onload\", init); }  \t \/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439\t function getCookie(name) { \tvar cookie = \" \" + document.cookie; \tvar search = \" \" + name + \"=\"; \tvar setStr = null; \tvar offset = 0; \tvar end = 0; \tif (cookie.length &gt; 0) { \t\toffset = cookie.indexOf(search); \t\tif (offset != -1) { \t\t\toffset += search.length; \t\t\tend = cookie.indexOf(\";\", offset) \t\t\tif (end == -1) { \t\t\t\tend = cookie.length; \t\t\t} \t\t\tsetStr = unescape(cookie.substring(offset, end)); \t\t} \t} \treturn(setStr); }  \/\/\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0433\u0440\u0443\u043f\u043f\u044b function selectChanged() { \tvar sel = document.getElementById('myselect'); \tvar str = sel.selectedIndex+1 ? (sel.options[sel.selectedIndex].innerHTML) : '\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043e'; \t \tdocument.cookie = \"sgrp=\"+str+\";\"; \t\/\/document.getElementById('nameslist').innerHTML = '&lt;?php $hello = $_COOKIE[\"sgrp\"]; echo $hello; ?&gt;'; \tlocation.reload(); } \t &lt;\/script&gt; \t \t &lt;strong&gt; &lt;div style=\"text-align: center;\"&gt;\u0422\u0415\u041b\u0415\u0424\u041e\u041d\u041d\u042b\u0419 \u0421\u041f\u0420\u0410\u0412\u041e\u0427\u041d\u0418\u041a&lt;\/div&gt; &lt;br&gt; &lt;\/strong&gt;  &lt;?php  $xml = simplexml_load_file('http:\/\/192.168.0.220\/phonebook\/phonebook.xml'); $conts_cnt = count($xml-&gt;Contact);  $grp_cnt = count($xml-&gt;pbgroup);  \/\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0433\u0440\u0443\u043f\u043f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a echo '&lt;div id=\"groupslist\" style=\"width: 20%; float:left\"&gt; \t&lt;strong&gt;\u0413\u0420\u0423\u041f\u041f\u042b:&lt;\/strong&gt; &lt;br&gt; &lt;br&gt; \t&lt;select id=\"myselect\" size=\"20\" onchange=\"javascript:selectChanged();\"&gt;'; echo \"&lt;option&gt;\u0412\u0441\u0435&lt;\/option&gt;\"; for($ig = 0; $ig &lt; $grp_cnt; $ig++) {         $Groups = $xml-&gt;pbgroup[$ig]; \t\tif ($Groups-&gt;name &lt;&gt; 'User Manager Group') echo \"&lt;option&gt;{$Groups-&gt;name}&lt;\/option&gt;\";     } echo \"&lt;\/select&gt; &lt;\/div&gt;\";  \/\/\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 echo '&lt;div id=\"nameslist\" style=\"width: 80%; float:right\"&gt;'; echo \"&lt;strong&gt;{$_COOKIE['sgrp']}&lt;\/strong&gt;\"; echo \"&lt;table class=sort align=center width=100%&gt;\"; echo \"&lt;thead&gt;\"; echo \"&lt;tr&gt;\"; echo \"&lt;td&gt;\u0424\u0430\u043c\u0438\u043b\u0438\u044f&lt;\/td&gt;\"; echo \"&lt;td&gt;\u0418\u043c\u044f&lt;\/td&gt;\"; echo \"&lt;td&gt;\u041d\u043e\u043c\u0435\u0440&lt;\/td&gt;\"; \/\/echo \"&lt;td&gt;\u0413\u0440\u0443\u043f\u043f\u0430&lt;\/td&gt;\"; echo \"&lt;\/tr&gt;\"; echo \"&lt;\/thead&gt;\"; echo \"&lt;tbody&gt;\";  for($i = 0; $i &lt; $conts_cnt; $i++) { \t$Contacts = $xml-&gt;Contact[$i];  \t$FirstName = $Contacts-&gt;FirstName; \t$LastName = $Contacts-&gt;LastName; \t$phonenumber = $Contacts-&gt;Phone-&gt;phonenumber;     echo \"&lt;tr&gt;\"; \tfor($ig = 0; $ig &lt; $grp_cnt; $ig++) {         $Groups = $xml-&gt;pbgroup[$ig];         if (strcasecmp($Contacts-&gt;Group, $Groups-&gt;id) == 0) { \t\t\tif ($_COOKIE[\"sgrp\"] == trim($Groups-&gt;name)) {             \techo \"&lt;td class=col1&gt;{$FirstName}&lt;\/td&gt;\";     \t\t\techo \"&lt;td class=col1&gt;{$LastName}&lt;\/td&gt;\";     \t\t\techo \"&lt;td class=col1&gt;{$phonenumber}&lt;\/td&gt;\";\t\t\t \t\t\t\t\/\/echo \"&lt;td class=col1&gt;{$Groups-&gt;name}&lt;\/td&gt;\"; \t\t\t} else if (\"\u0412\u0441\u0435\" == $_COOKIE[\"sgrp\"]) {             \techo \"&lt;td class=col1&gt;{$FirstName}&lt;\/td&gt;\";     \t\t\techo \"&lt;td class=col1&gt;{$LastName}&lt;\/td&gt;\";     \t\t\techo \"&lt;td class=col1&gt;{$phonenumber}&lt;\/td&gt;\"; \t\t\t} \t\t}     }      echo \"&lt;\/tr&gt;\"; }     echo \"&lt;\/tbody&gt;\";     echo \"&lt;\/table&gt;\"; echo '&lt;\/div&gt;'; ?&gt;  &lt;\/html&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/465825\/\"> https:\/\/habr.com\/ru\/post\/465825\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\u0414\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  1) \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 SQL \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432:<\/p>\n<pre><code class=\"dos\">mysql -u freepbxuser -p \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f Enter \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.  \u041f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u043f\u0430\u0440\u043e\u043b\u044f \u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f Enter, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 MySQL: mysql&gt;_ <\/code><\/pre>\n<p>  2) \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b sql<\/p>\n<pre><code class=\"dos\">\u0412\u044b\u0432\u043e\u0434 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0431\u0430\u0437: SHOW DATABASES; \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0431\u0430\u0437\u0435: USE dbtest; \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0432\u0441\u0435\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437 \u0431\u0430\u0437\u044b: SHOW tables; \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b: SELECT * FROM page; \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b: DESCRIBE testtable; <\/code><\/pre>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-294144","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/294144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=294144"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/294144\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=294144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=294144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=294144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}