Вывод содержимого .ini файла средствами php

Рейтинг: 1Ответов: 4Опубликовано: 30.06.2011

Доброго времени суток. Есть некий .ini файл в котором содержится большой массив информации о пользователях. Необходимо всю информацию находящуюся в файле в читабельном виде вывести (на каждого пользователя по строке) на страницу сайта. Затем добавить несколько условий (например: в одном из дополнительных полей, если один из параметров пользователя = от 0 до 2500, то вывести одно изображение, от 2501 до 5000 - другое и т.д.). Объяснил несколько криво =) Надеюсь поймете...

Вот 2 записи из .ini файла:

[76561198777556446 StatsObject]  
PlayerName=Puma  
PlayerIP=86.102.208.50:14079  
SelectedVeterancy=ServerPerksV3.SRVetSharpshooter  
DamageHealedStat=0  
WeldingPointsStat=2620  
ShotgunDamageStat=5159  
HeadshotKillsStat=68  
StalkerKillsStat=0  
BullpupDamageStat=0  
MeleeDamageStat=1859  
FlameThrowerDamageStat=0  
SelfHealsStat=0  
SoleSurvivorWavesStat=0  
CashDonatedStat=0  
FeedingKillsStat=0  
BurningCrossbowKillsStat=0  
GibbedFleshpoundsStat=1  
StalkersKilledWithExplosivesStat=0  
GibbedEnemiesStat=16  
BloatKillsStat=15  
SirenKillsStat=6  
KillsStat=298  
ExplosivesDamageStat=10406  
TotalZedTimeStat=135.000000

[76561200266252308 StatsObject]  
PlayerName=Arko74  
PlayerIP=81.20.166.175:54019  
SelectedVeterancy=ServerPerksV3.SRVetSupportSpec  
DamageHealedStat=1282  
WeldingPointsStat=22490  
ShotgunDamageStat=9086  
HeadshotKillsStat=944  
StalkerKillsStat=239  
BullpupDamageStat=321378  
MeleeDamageStat=12972  
FlameThrowerDamageStat=0  
SelfHealsStat=279  
SoleSurvivorWavesStat=9  
CashDonatedStat=3440  
FeedingKillsStat=0  
BurningCrossbowKillsStat=0  
GibbedFleshpoundsStat=0  
StalkersKilledWithExplosivesStat=35  
GibbedEnemiesStat=132  
BloatKillsStat=199  
SirenKillsStat=63  
KillsStat=4295  
ExplosivesDamageStat=59712  
TotalZedTimeStat=2199.000000

Вот мой вариант решения:

вот мой вариант решения, но результат довольно печальный...

<body bgcolor="#fff">
<?
$num_of_mes = 500; // количество сообщений на странице
$num_of_mes2 = 15000;
$i=-28;$i2=-7;$i3=-24;$i4=-25;$i5=-4;$i6=-5;$ii2=-7;
$messages_array = file("ServerPerksStat.ini", true);
$overall_output = $messages_array;

srand ((double) microtime() * 10000000);
echo "<table align=Left bgcolor=#fff cellpadding=8 cellspacing=0 border=1 style='font-size :10px'>";
echo "<tr><td>".Игрок."</td><td>".Убийств."</td><td>".Сварка."</td><td>".Медицина."</td><td>".Очки."</td><td>".Игровое_время."</td></tr>";  
for($m=0;$m<$num_of_mes;$m++)
{$i=$i+29;$i2=$i2+29;$i3=$i3+29;$i4=$i4+29;$i5=$i5+29;$i6=$i6+29;
if($num_of_mes==1)
  { 
    echo "<tr><td>".$overall_output[$i]."</td><td>".$messages_array[$i2]."</td><td>".$messages_array[$i3]."</td><td>".$messages_array[$i4]."</td><td>".$messages_array[$i5]."</td><td>".$messages_array[$i6]."</td></tr>";  
}
  else
  {
    echo "<tr><td>".$overall_output[$i]."</td><td>".$messages_array[$i2]."</td><td>".$messages_array[$i3]."</td><td>".$messages_array[$i4]."</td><td>".$messages_array[$i5]."</td><td>".$messages_array[$i6]."</td></tr>";  
}
}
echo "</table>";
?>

Пробовал сделать все через функцию parse_ini_file(), но как-то безуспешно...
Помогите разобраться

Ответы

▲ 5

Ппц вы тут трактористы.

$data = parse_ini_file($filename, true);
foreach($data as $key => $item)
...

Надеюсь, суть ясна и что надо дальше.

Тут кода в нацать раз меньше надо, чем вы накарявили.

▲ 4
foreach (parse_ini_file("ServerPerksStat.ini", true) as $id => $statsObject) {
    // выводим $statsObject['PlayerName'], $statsObject['PlayerIP'], etc
}
▲ 2
<? header('Content-Type: text/html; charset=utf8')?>
<html>
<head>
</head>
<body><?
error_reporting(E_ALL);
$path = 'myfile.ini'; // наш файл
$objlist = array();
$ini_content = file_get_contents($path); // берем содержимое
$n = 0;
foreach(explode("\n", $ini_content) as $line) {  // разбиваем на линии
  if (empty($objlist[$n])) $objlist[$n] = new stdClass(); // если еще не создали, создаем объект
  if (trim($line) == '') { $n++; continue; } // если линяя пустая - пошел след. объект
  if ($line{0} == '[') { // если первый символ "[", значит, это заголовок
    list($num) = explode(' ', substr($line, 1), 2);
    $objlist[$n]->NUM = $num;
    continue;
    }
   // в других случаях пишем в объект пары ключ->значение
  if (strpos($line, '=') < 1) continue;
  @list($code, $val) = explode('=', $line, 2);
  $objlist[$n]->$code = $val;
  }

// начинаем вывод
// допустим, выводим Имя, Урон с Шотгана и хедшоты
echo '<table width="100%">';
echo '<tr><td>Имя</td><td>Урон с Шотгана</td><td>Хедшоты</td></tr>';
foreach ($objlist as $playerStats) {
  // а тут у вас объект $playerStats, с которым уже можно делать что угодно
  // выводим нужные поля
  echo '<tr>';
  echo '<td>'.$playerStats->PlayerName.'</td>';
  echo '<td>'.$playerStats->ShotgunDamageStat.'</td>';
  echo '<td>'.$playerStats->HeadshotKillsStat.'</td>';
  echo '</tr>';
  }
echo '</table>';
// конец вывода
?>
<pre>
Структура объекта:

<? var_dump($objlist[1]); ?>
</pre></body></html>

На всякий случай прикрепляю файл. У меня ошибок не было.

▲ 2

хм, не вижу проблем с parse_ini_file(). У данной функции есть второй не обязательный параметр $process_sections, выставив которой в true вы получите ассоциативный массив секций ini файла:

array(2) {
    ["76561198777556446 StatsObject"]=>
    array(24) {
        ["PlayerName"]=> string(4) "Puma"
        ["PlayerIP"]=> string(19) "86.102.208.50:14079"
        ...
    }
    ["76561200266252308 StatsObject"]=>
    array(24) {
        ["PlayerName"]=> string(6) "Arko74"
        ["PlayerIP"]=> string(19) "81.20.166.175:54019"
        ...
    }
}

Затем не хитрыми телодвижениями выводим:

// начинаем вывод
// допустим, выводим Имя, Урон с Шотгана и хедшоты
echo '<table width="100%">';
echo '<tr><td>Имя</td><td>Урон с Шотгана</td><td>Хедшоты</td></tr>';

// ServerPerksStat.ini - это путь до твоего ini-файла
foreach(parse_ini_file('ServerPerksStat.ini', true, INI_SCANNER_RAW) as $key => $playerStats) 
{
    list($playerStats['NUM'], ) = explode(' ', $key);

    // выводим нужные поля
    echo '<tr>';
    echo '<td>'.$playerStats['PlayerName'].'</td>';
    echo '<td>'.$playerStats['ShotgunDamageStat'].'</td>';
    echo '<td>'.$playerStats['HeadshotKillsStat'].'</td>';
    echo '</tr>';
}
echo '</table>';
// конец вывода

UPD. Да простит меня @Sh4dow, взял его кусок кода для вывода. Какие поля выводить, думаю, сам решишь, ключи ассоциативного массива $playerStats, как видишь, совпадают с именами полей из ini-файла.