У меня есть файл ini, который выглядит так:
[account]
user= saas
pwd=di1Z-ARMfKF2
description= as
expdate= 2015-08-22
caid = 1702,1830,0B00,0D95,0500,0648,0B02,09C7,1722,1834,098C
betatunnel= 1834.FFFF:1722,1833.FFFF:1702
group= 1,2,3,4,5,6,7,8,9,30
cccmaxhops= 5
cccreshare= 0
[account]
user= sdadsa
pwd= XnbawAH/ZYRP
description= sdasda
expdate= 2016-08-13
caid= 1702,1830,0B00,0D95,0500,0648,0B02,09C7,1722,1834,098C
betatunnel= 1834.FFFF:1722,1833.FFFF:1702
group= 1,2,3,4,5,6,7,8,9,30
cccmaxhops= 5
cccreshare= 0
Мне нужно найти, например, содержимое "user", где описание "sdasda". Я пытался:
<?php
$accounts = [];
$accountIniArr = explode('[account]', file_get_contents('oscam.user'));
foreach ($accountIniArr as $accIni)
{
$account = parse_ini_string($accIni);
$accounts[$acc['user']] = $account;
}
echo $accounts['sdadsa']['description'];
?>
Не работает, похоже, что массив не обрабатывается правильно, любая идея, как исправить?
Из соображений, изложенных в комментариях, вы не можете использовать ini-разделы с одинаковыми именами, поэтому для использования этого ini-формата вам нужно будет выполнить небольшой пользовательский синтаксический анализ. Вот пример того, что означают chris85 и Mark baker:
$accounts = [];
// Read the .ini file contents, and explode it by the section identifier
$accountIniArr = explode('[account]', file_get_contents('users.user'));
// Iterate through the resultant array, and parse each of the user account
// .ini settings, storing them in a multi-dimensional array as you go
for ($i=1; $i<count($accountIniArr); $i++)
{
$accountIni = $accountIniArr[$i];
$account = parse_ini_string($accountIni);
$accounts[$account['user']] = $account;
}
Это создаст многомерный массив, содержащий все учетные записи, причем первым индексом является поле user
. Чтобы использовать данные образца, которые вы отправили, массив будет:
[
saas => [
user => saas,
pwd => di1Z-ARMfKF2,
description => as,
expdate => 2015-08-22,
caid => 1702,1830,0B00,0D95,0500,0648,0B02,09C7,1722,1834,098C,
betatunnel => 1834.FFFF:1722,1833.FFFF:1702,
group => 1,2,3,4,5,6,7,8,9,30,
cccmaxhops => 5,
cccreshare => 0
],
sdadsa => [
user => sdadsa,
pwd => XnbawAH/ZYRP,
description => sdasda,
expdate => 2016-08-13,
caid => 1702,1830,0B00,0D95,0500,0648,0B02,09C7,1722,1834,098C,
betatunnel => 1834.FFFF:1722,1833.FFFF:1702,
group => 1,2,3,4,5,6,7,8,9,30,
cccmaxhops => 5,
cccreshare => 0
]
]
Однако вы также можете просто поместить имя пользователя в заголовки разделов файла ini вместо account
.
$accounts['sdadsa']['description']
$ini_array
? Я почти уверен, что вы не можете использоватьparse_ini_file()
вот так; дублированные заголовки разделов будут перезаписаны. Вы должны использовать базу данных вместо этого.