PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Описание: Обрезать лишние строки из файла
Поиск в теме | Версия для печати
Uint32
Отправлено: 19 Марта, 2020 - 16:50:40
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2018
Помог: 0 раз(а)
Добрый вечер всем. Ребзя, нужна ваша помощь.
Имеется сервер, в его директории лежит файл: server.dat. В этот файл заносится информация о статусе, непосредственно самим сервером. Там кол-во пользователей, кол-во созданных каналов и тд. Вот что внутри:
CODE (
htmlphp ):
скопировать код в буфер обмена
[ STATUS]
Version= 1. 92. 1
Uptime= 42 minutes 22 seconds
Users= 193
Channels= 36
UserAccounts= 457
[ CHANNELS]
channel1= The Void
channel2= Общий
channel3= Разное
И есть пшп-файл( прикладываю его к теме, а так же дублирую ниже), который выводит данные server.dat на форум/сайт.
PHP:
скопировать код в буфер обмена
<?PHP
// Path to server.dat
$statusfile = '/usr/local/pvpgn/var/status/server.dat' ;
// What info should be shown?
'STATUS' => true ,
'USERS' => false ,
'GAMES' => false ,
'CHANNELS' => false ,
) ;
// Display game icons next to users/games online?
$displayicons = false ;
// URL of directory containing the game icons. No trailing slash.
$iconsdir = "/gameicons" ;
// Enable profile links?
$profilelink_enable = true ;
$profilelink_url = "/stats/index.php" ; // URL to stats
// Display the list of users/games/channels side by side rather than in a vertical list?
$sidebyside = false ;
// Language constants. Translate into your native language if needed.
'STATUSDETAIL' => 'Server Status' ,
'USERSDETAIL' => 'Users currently online' ,
'GAMESDETAIL' => 'Games currently online' ,
'CHANNELSDETAIL' => 'Channels currently online' ,
'Version' => 'version' ,
'Uptime' => 'Uptime' ,
'Users' => 'Users' ,
'Games' => 'Games' ,
'Channels' => 'Channels' ,
'UserAccounts' => 'User accounts' ,
'none' => 'None' ,
) ;
// ------------------------------------------------------------------------------------------ //
// //
// Configuration finished, no need to change anything below here //
// //
// ------------------------------------------------------------------------------------------ //
function parse_statusfile( $filename ) {
$lines = file ( $filename ) ; foreach ( $lines as $line ) {
if ( $line == "" ) {
continue ;
} else if ( $line [ 0 ] == "[" && $line [ strlen ( $line ) - 1 ] == "]" ) { } else {
$property = substr ( $line , 0
, $pos ) ; $value = substr ( $line , $pos + 1
) ; if ( $sec_name == 'USERS' || $sec_name == 'GAMES' ) {
list ( $ini_array [ $sec_name ] [ $property ] [ 'ctag' ] , $ini_array [ $sec_name ] [ $property ] [ 'name' ] ) = explode ( ',' , $value ) ; } else {
$ini_array [ $sec_name ] [ $property ] = $value ;
}
}
}
return $ini_array ;
}
function namedisplay( $user ) {
global $profilelink_enable , $profilelink_url ;
if ( $profilelink_enable && $user [ 'ctag' ] != 'CHAT' ) {
return "<a href=\" " . $profilelink_url . "?game=" . $user [ 'ctag' ] . "&user=" . $user [ 'name' ] . "\" >" . $user [ 'name' ] . "</a>" ;
} else {
return $user [ 'name' ] ;
}
}
$status_array = parse_statusfile( $statusfile ) ;
if ( $sidebyside ) {
$output = "<div>\n " ;
foreach ( $show as $type => $show ) {
if ( $show == true ) {
$output .= "<strong>" . $language [ $type . 'DETAIL' ] . "</strong><br>\n " ;
if ( empty ( $status_array [ $type ] ) ) { $output .= $language [ 'none' ] . "<br><br>\n " ;
} else {
switch ( $type ) {
case 'STATUS' :
foreach ( $status_array [ $type ] as $key => $value ) {
$output .= $language [ $key ] . ": " . $value . "<br>" ;
}
break ;
case 'USERS' :
foreach ( $status_array [ $type ] as $key => $value ) {
$output .= namedisplay( $value ) . ", " ;
}
break ;
case 'GAMES' :
foreach ( $status_array [ $type ] as $key => $value ) {
$output .= $value [ 'name' ] . ", " ;
}
break ;
case 'CHANNELS' :
foreach ( $status_array [ $type ] as $key => $value ) {
$output .= $value . ", " ;
}
break ;
}
$output = substr ( $output , 0
,- 4
) ; $output .= "<br><br>\n " ;
}
}
}
} else {
$output = "<table cellspacing=\" 0\" >\n " ;
foreach ( $show as $type => $show ) {
if ( $show == true ) {
$output .= " <tr>\n " ;
$output .= " <td colspan=\" 2\" >\n " ;
$output .= " <strong>" . $language [ $type . 'DETAIL' ] . "</strong>\n " ;
$output .= " </td>\n " ;
$output .= " </tr>\n " ;
if ( $status_array [ $type ] == true ) {
foreach ( $status_array [ $type ] as $key => $value ) {
if ( $type == 'STATUS' ) {
$output .= " <tr>\n " ;
$output .= " <td colspan=\" 2\" >\n " ;
$output .= " " . $language [ $key ] . ": " . $value . "\n " ;
$output .= " </td>\n " ;
$output .= " </tr>\n " ;
} else {
$output .= " <tr>\n " ;
if ( $type != 'CHANNELS' ) {
$output .= " <td width=\" 1%\" >\n " ;
if ( $displayicons )
$output .= " <img src=\" " . $iconsdir . "/" . $value [ 'ctag' ] . ".jpg\" >\n " ;
else
$output .= " \n " ;
$output .= " </td>\n " ;
$output .= " <td>\n " ;
if ( $type == 'USERS' ) {
$output .= " " . namedisplay( $value ) . "\n " ;
} else {
$output .= " " . $value [ 'name' ] . "\n " ;
}
$output .= " </td>\n " ;
$output .= " </tr>\n " ;
} else {
$output .= " <tr>\n " ;
$output .= " <td colspan=\" 2\" >\n " ;
$output .= " " . $value . "\n " ;
$output .= " </td>\n " ;
$output .= " </tr>\n " ;
}
}
}
} else {
$output .= " <tr>\n " ;
$output .= " <td colspan=\" 2\" >\n " ;
$output .= " <strong>" . $language [ 'none' ] . "</strong>\n " ;
$output .= " </td>\n " ;
$output .= " </tr>\n " ;
}
$output .= " <tr>\n " ;
$output .= " <td colspan=\" 2\" height=\" 7\" >\n " ;
$output .= " </td>\n " ;
$output .= " </tr>\n " ;
}
}
$output .= "</table>\n " ;
}
echo $output ;
?>
1. Не могу отрезать лишние строки статуса. Т.е из 5 строк мне нужны только 2, к примеру: Uptime и Version.
2. Файлы status.php и serverd.dat лежат на отдельном сервере впс. И когда я обращаюсь к файлу status.php, набрав айпи впс сервера, он показыает мне статистику, как и должно быть.
Но как мне вывести статистику на странице своего форума? Форум расположен уже на другом сервере(хостинге).
Пытался редактировать файл server.dat, подставляя любое другое слово в скобках, но при перезапуске сервера, этот файл приводится к дефолту. А там где берется строка со знаком "=" и что-то к ней доабвляется - это уже сложно для меня, не врубаюсь честно. Помогите, а то я туплю уже что-то..(Отредактировано автором: 19 Марта, 2020 - 17:23:53)
Uint32
Отправлено: 19 Марта, 2020 - 16:53:18
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2018
Помог: 0 раз(а)
Вот файл, как-то странно у вас система сделана прикрепления файлов и скринов...
(Отредактировано автором: 19 Марта, 2020 - 17:02:49)
Vladimir Kheifets
Отправлено: 21 Марта, 2020 - 17:08:32
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Uint32 пишет: Никто не знает, подсказать не может ?)
Добрый день!
Можно сделать так:
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
$file = <<<EOF
[STATUS]
Version=1.92.1
Uptime=42 minutes 22 seconds
Users=193
Channels=36
UserAccounts=457
[CHANNELS]
channel1=The Void
channel2=Общий
channel3=Разное
EOF ;
/*
Вместо:
$lines = file($filename);
Поставьте:
$file=file_get_contents($filename);
*/
//Выбрать все пары ключ=значение
echo "<pre>" ;
/*
Array
(
[0] => Version
[1] => Uptime
[2] => Users
[3] => Channels
[4] => UserAccounts
[5] => channel1
[6] => channel2
[7] => channel3
)
Array
(
[0] => 1.92.1
[1] => 42
[2] => 193
[3] => 36
[4] => 457
[5] => The
[6] => Общий
[7] => Разное
)
Array
(
[Version] => 1.92.1
[Uptime] => 42
[Users] => 193
[Channels] => 36
[UserAccounts] => 457
[channel1] => The
[channel2] => Общий
[channel3] => Разное
)
*/
//Выбрать только 2, к примеру: Uptime и Version.
echo "<pre>" ;
/*
Array
(
[0] => Version
[1] => Uptime
)
Array
(
[0] => 1.92.1
[1] => 42
)
Array
(
[Version] => 1.92.1
[Uptime] => 42
)
*/
?>
Удачи!(Отредактировано автором: 21 Марта, 2020 - 17:19:12)
Vladimir Kheifets
Отправлено: 26 Марта, 2020 - 14:01:02
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Uint32 пишет:
Благодарю. А как на счет 2 вопроса, это я выведу ведь все на 1 машине, а форум находится на другой.
Если Вы имеете ввиду под 1 машиной и другой - два сервера(домена), то можно использовать cURL или SoapServer, SoapClient
(дополнение)
Это упрощенная реализация с
cURL (без авторизации)
Вариант 1
first-domen sendInfo.php
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
//first-domen sendInfo.php
$file = <<<EOF
[STATUS]
Version=1.92.1
Uptime=42 minutes 22 seconds
Users=193
Channels=36
UserAccounts=457
[CHANNELS]
channel1=The Void
channel2=Общий
channel3=Разное
EOF ;
echo $file ;
?>
second-domen getInfo.phpСпойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
//second-domen getInfo.php
$url = "https://www.first-domen.com/sendInfo.php" ;
$file = getInfo( $url ) ;
//-------------------------------
//Выбрать все пары ключ=значение
echo "<pre>" ;
######################################################################
function getInfo( $url ) {
CURLOPT_RETURNTRANSFER => true , // return web page
CURLOPT_HEADER => false , // don't return headers
CURLOPT_FOLLOWLOCATION => true , // follow redirects
CURLOPT_ENCODING => "" , // handle all encodings
CURLOPT_USERAGENT => "spider" , // who am i
CURLOPT_AUTOREFERER => true , // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120 , // timeout on connect
CURLOPT_TIMEOUT => 120 , // timeout on response
CURLOPT_MAXREDIRS => 10 , // stop after 10 redirects
) ;
return $content ;
}
###################################################################
/*
Array
(
[0] => Version
[1] => Uptime
[2] => Users
[3] => Channels
[4] => UserAccounts
[5] => channel1
[6] => channel2
[7] => channel3
)
Array
(
[0] => 1.92.1
[1] => 42
[2] => 193
[3] => 36
[4] => 457
[5] => The
[6] => Общий
[7] => Разное
)
Array
(
[Version] => 1.92.1
[Uptime] => 42
[Users] => 193
[Channels] => 36
[UserAccounts] => 457
[channel1] => The
[channel2] => Общий
[channel3] => Разное
)
*/
//Выбрать только 2, к примеру: Uptime и Version.
echo "<pre>" ;
/*
Array
(
[0] => Version
[1] => Uptime
)
Array
(
[0] => 1.92.1
[1] => 42
)
Array
(
[Version] => 1.92.1
[Uptime] => 42
)
*/
?>
Вариант 2 с json
first-domen sendInfo.phpСпойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
//first-domen sendInfo.php
$file = <<<EOF
[STATUS]
Version=1.92.1
Uptime=42 minutes 22 seconds
Users=193
Channels=36
UserAccounts=457
[CHANNELS]
channel1=The Void
channel2=Общий
channel3=Разное
EOF ;
//Выбрать только 2, к примеру: Uptime и Version.
?>
second-domen getInfo.phpСпойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
//second-domen getInfo.php
$url = "https://www.first-domen/sendInfo.php" ;
$info = getInfo( $url ) ;
echo "<pre>" ;
############################################
function getInfo( $url ) {
CURLOPT_RETURNTRANSFER => true , // return web page
CURLOPT_HEADER => false , // don't return headers
CURLOPT_FOLLOWLOCATION => true , // follow redirects
CURLOPT_ENCODING => "" , // handle all encodings
CURLOPT_USERAGENT => "spider" , // who am i
CURLOPT_AUTOREFERER => true , // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120 , // timeout on connect
CURLOPT_TIMEOUT => 120 , // timeout on response
CURLOPT_MAXREDIRS => 10 , // stop after 10 redirects
) ;
return $content ;
}
############################################
/*
Array
(
[Version] => 1.92.1
[Uptime] => 42
)
*/
?>
Удачи!(Отредактировано автором: 26 Марта, 2020 - 16:10:48)
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB