Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Парсинг файла .dat

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Обрезать лишние строки из файла
Uint32
Отправлено: 19 Марта, 2020 - 16:50:40
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2018  


Помог: 0 раз(а)




Добрый вечер всем. Ребзя, нужна ваша помощь.

Имеется сервер, в его директории лежит файл: server.dat. В этот файл заносится информация о статусе, непосредственно самим сервером. Там кол-во пользователей, кол-во созданных каналов и тд. Вот что внутри:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. [STATUS]
  3. Version=1.92.1
  4. Uptime=42 minutes 22 seconds
  5. Users=193
  6. Channels=36
  7. UserAccounts=457
  8. [CHANNELS]
  9. channel1=The Void
  10. channel2=Общий
  11. channel3=Разное
  12.  


И есть пшп-файл( прикладываю его к теме, а так же дублирую ниже), который выводит данные server.dat на форум/сайт.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. // Path to server.dat
  5. $statusfile = '/usr/local/pvpgn/var/status/server.dat';
  6.  
  7. // What info should be shown?
  8. $show = array(
  9.     'STATUS' => true,
  10.     'USERS' => false,
  11.     'GAMES' => false,
  12.     'CHANNELS' => false,
  13. );
  14.  
  15. // Display game icons next to users/games online?
  16. $displayicons = false;
  17.  
  18. // URL of directory containing the game icons.  No trailing slash.
  19. $iconsdir = "/gameicons";
  20.  
  21. // Enable profile links?
  22. $profilelink_enable = true;
  23. $profilelink_url = "/stats/index.php";    // URL to stats
  24.  
  25. // Display the list of users/games/channels side by side rather than in a vertical list?
  26. $sidebyside = false;
  27.  
  28. // Language constants.  Translate into your native language if needed.
  29. $language = array(
  30.     'STATUSDETAIL'   => 'Server Status',
  31.     'USERSDETAIL'    => 'Users currently online',
  32.     'GAMESDETAIL'    => 'Games currently online',
  33.     'CHANNELSDETAIL' => 'Channels currently online',
  34.  
  35.     'Version'        => 'version',
  36.     'Uptime'         => 'Uptime',
  37.     'Users'          => 'Users',
  38.     'Games'          => 'Games',
  39.     'Channels'       => 'Channels',
  40.     'UserAccounts'   => 'User accounts',
  41.    
  42.     'none'           => 'None',
  43. );
  44.  
  45. // ------------------------------------------------------------------------------------------ //
  46. //                                                                                            //
  47. //               Configuration finished, no need to change anything below here                //
  48. //                                                                                            //
  49. // ------------------------------------------------------------------------------------------ //
  50.  
  51.  
  52. function parse_statusfile($filename) {
  53.     $ini_array = array();
  54.     $lines = file($filename);
  55.     foreach($lines as $line) {
  56.         $line = trim($line);
  57.         if ($line == "") {
  58.             continue;
  59.         } else if ($line[0] == "[" && $line[strlen($line) - 1] == "]") {
  60.             $sec_name = substr($line, 1, strlen($line) - 2);
  61.         } else {
  62.             $pos = strpos($line, "=");
  63.             $property = substr($line, 0, $pos);
  64.             $value = substr($line, $pos + 1);
  65.             if ($sec_name == 'USERS' || $sec_name == 'GAMES') {
  66.                 list($ini_array[$sec_name][$property]['ctag'],$ini_array[$sec_name][$property]['name']) = explode(',',$value);
  67.             } else {
  68.                 $ini_array[$sec_name][$property] = $value;
  69.             }
  70.         }
  71.     }
  72.     return $ini_array;
  73. }
  74.  
  75. function namedisplay($user) {
  76.     global $profilelink_enable, $profilelink_url;
  77.     if ($profilelink_enable && $user['ctag'] != 'CHAT') {
  78.         return "<a href=\"".$profilelink_url."?game=".$user['ctag']."&user=".$user['name']."\">".$user['name']."</a>";
  79.     } else {
  80.         return $user['name'];
  81.     }
  82. }
  83.  
  84. $status_array = parse_statusfile($statusfile);
  85.  
  86. if ($sidebyside) {
  87.     $output = "<div>\n";
  88.     foreach ($show as $type => $show) {
  89.         if ($show == true) {
  90.             $output .= "<strong>".$language[$type.'DETAIL']."</strong><br>\n";
  91.             if (empty($status_array[$type])) {
  92.                 $output .= $language['none']."<br><br>\n";
  93.             } else {
  94.                 switch ($type) {
  95.                     case 'STATUS':
  96.                         foreach ($status_array[$type] as $key => $value) {
  97.                             $output .= $language[$key].": ".$value."<br>";
  98.                         }
  99.                         break;
  100.                     case 'USERS':
  101.                         foreach ($status_array[$type] as $key => $value) {
  102.                             $output .= namedisplay($value).",   ";
  103.                         }
  104.                         break;
  105.                     case 'GAMES':
  106.                         foreach ($status_array[$type] as $key => $value) {
  107.                             $output .= $value['name'].",   ";
  108.                         }
  109.                         break;
  110.                     case 'CHANNELS':
  111.                         foreach ($status_array[$type] as $key => $value) {
  112.                             $output .= $value.",   ";
  113.                         }
  114.                         break;
  115.                 }
  116.                 $output = substr($output,0,-4);
  117.                 $output .= "<br><br>\n";
  118.             }
  119.         }
  120.     }
  121. } else {
  122.     $output = "<table cellspacing=\"0\">\n";
  123.     foreach ($show as $type => $show) {
  124.         if ($show == true) {
  125.             $output .= "  <tr>\n";
  126.             $output .= "    <td colspan=\"2\">\n";
  127.             $output .= "      <strong>".$language[$type.'DETAIL']."</strong>\n";
  128.             $output .= "    </td>\n";
  129.             $output .= "  </tr>\n";
  130.             if ($status_array[$type] == true) {
  131.                 foreach ($status_array[$type] as $key => $value) {
  132.                     if ($type == 'STATUS') {
  133.                         $output .= "  <tr>\n";
  134.                         $output .= "    <td colspan=\"2\">\n";
  135.                         $output .= "      ".$language[$key].": ".$value."\n";
  136.                         $output .= "    </td>\n";
  137.                         $output .= "  </tr>\n";
  138.                     } else {
  139.                         $output .= "  <tr>\n";
  140.                         if ($type != 'CHANNELS') {
  141.                             $output .= "    <td width=\"1%\">\n";
  142.                             if ($displayicons)
  143.                                 $output .= "      <img src=\"".$iconsdir."/".$value['ctag'].".jpg\">\n";
  144.                             else
  145.                                 $output .= "      &nbsp;\n";
  146.                             $output .= "    </td>\n";
  147.                             $output .= "    <td>\n";
  148.                             if ($type == 'USERS') {
  149.                                 $output .= "      ".namedisplay($value)."\n";
  150.                             } else {
  151.                                 $output .= "      ".$value['name']."\n";
  152.                             }
  153.                             $output .= "    </td>\n";
  154.                             $output .= "  </tr>\n";
  155.                         } else {
  156.                             $output .= "  <tr>\n";
  157.                             $output .= "    <td colspan=\"2\">\n";
  158.                             $output .= "      ".$value."\n";
  159.                             $output .= "    </td>\n";
  160.                             $output .= "  </tr>\n";
  161.                         }
  162.                     }
  163.                 }
  164.             } else {
  165.                 $output .= "  <tr>\n";
  166.                 $output .= "    <td colspan=\"2\">\n";
  167.                 $output .= "      <strong>".$language['none']."</strong>\n";
  168.                 $output .= "    </td>\n";    
  169.                 $output .= "  </tr>\n";
  170.             }
  171.             $output .= "  <tr>\n";
  172.             $output .= "    <td colspan=\"2\" height=\"7\">\n";
  173.             $output .= "    </td>\n";
  174.             $output .= "  </tr>\n";
  175.         }
  176.     }
  177.     $output .= "</table>\n";
  178. }
  179. echo $output;
  180. ?>
  181.  
  182.  


1. Не могу отрезать лишние строки статуса. Т.е из 5 строк мне нужны только 2, к примеру: Uptime и Version.

2. Файлы status.php и serverd.dat лежат на отдельном сервере впс. И когда я обращаюсь к файлу status.php, набрав айпи впс сервера, он показыает мне статистику, как и должно быть.
Но как мне вывести статистику на странице своего форума? Форум расположен уже на другом сервере(хостинге).

Пытался редактировать файл server.dat, подставляя любое другое слово в скобках, но при перезапуске сервера, этот файл приводится к дефолту. А там где берется строка со знаком "=" и что-то к ней доабвляется - это уже сложно для меня, не врубаюсь честно. Помогите, а то я туплю уже что-то..

(Отредактировано автором: 19 Марта, 2020 - 17:23:53)

 
 Top
Uint32
Отправлено: 19 Марта, 2020 - 16:53:18
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2018  


Помог: 0 раз(а)




Вот файл, как-то странно у вас система сделана прикрепления файлов и скринов...
Скачать файл: status.php
Скачан раз: 36

(Отредактировано автором: 19 Марта, 2020 - 17:02:49)

 
 Top
Uint32
Отправлено: 21 Марта, 2020 - 14:13:54
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2018  


Помог: 0 раз(а)




Никто не знает, подсказать не может ?)
 
 Top
Vladimir Kheifets
Отправлено: 21 Марта, 2020 - 17:08:32
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Uint32 пишет:
Никто не знает, подсказать не может ?)
Добрый день!
Можно сделать так:
Спойлер (Отобразить)
Удачи!

(Отредактировано автором: 21 Марта, 2020 - 17:19:12)

 
 Top
Uint32
Отправлено: 26 Марта, 2020 - 13:07:52
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2018  


Помог: 0 раз(а)




[quote=Vladimir Kheifets][/quote]

Благодарю. А как на счет 2 вопроса, это я выведу ведь все на 1 машине, а форум находится на другой.
 
 Top
Vladimir Kheifets
Отправлено: 26 Марта, 2020 - 14:01:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Uint32 пишет:
Vladimir Kheifets пишет:

Благодарю. А как на счет 2 вопроса, это я выведу ведь все на 1 машине, а форум находится на другой.

Если Вы имеете ввиду под 1 машиной и другой - два сервера(домена), то можно использовать cURL или SoapServer, SoapClient
(дополнение)
Это упрощенная реализация с cURL (без авторизации)
Вариант 1
first-domen sendInfo.php
Спойлер (Отобразить)
second-domen getInfo.php
Спойлер (Отобразить)

Вариант 2 с json
first-domen sendInfo.php
Спойлер (Отобразить)
second-domen getInfo.php
Спойлер (Отобразить)
Удачи!

(Отредактировано автором: 26 Марта, 2020 - 16:10:48)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB