#php
#php
Вопрос:
Я использую parse_ini_file() для чтения ini-файла, содержащего эту строку:
[admin]
hide_fields[] = ctr_ad_headerImg
проблема в том, что он выводит его как,
[admin]
hide_fields = Array
кто-нибудь может мне помочь? как мне прочитать «hide_fields[]» как строку?
С наилучшими пожеланиями Joricam
Мой код:
$ini_array = parse_ini_file($config_path, true);
//print_r($ini_array);
//echo $ini_array["default_colors"]["sitebg"];
$ini_array["default_colors"]["sitebg"]="#000000";
write_php_ini($ini_array,$config_path);
Функции, которые я использую:
function write_php_ini($array, $file)
{
$res = array();
foreach($array as $key => $val)
{
if(is_array($val))
{
$res[] = "[$key]";
foreach($val as $skey => $sval) $res[] = "$skey = ".(is_numeric($sval) ? $sval : ''.$sval.'');
}
else $res[] = "$key = ".(is_numeric($val) ? $val : ''.$val.'');
}
safefilerewrite($file, implode("rn", $res));
}
//////
function safefilerewrite($fileName, $dataToSave)
{ if ($fp = fopen($fileName, 'w'))
{
$startTime = microtime();
do
{ $canWrite = flock($fp, LOCK_EX);
// If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load
if(!$canWrite) usleep(round(rand(0, 100)*1000));
} while ((!$canWrite)and((microtime()-$startTime) < 1000));
//file was locked so now we can store information
if ($canWrite)
{ fwrite($fp, $dataToSave);
flock($fp, LOCK_UN);
}
fclose($fp);
}
}
Ответ №1:
Parse_ini_file()
обрабатывает такие идентификаторы. Он корректно преобразует их в массивы при чтении ini-файла:
print_r(parse_ini_string("hide_fields[] = ctr_ad_headerImg"));
Сгенерирует:
Array
(
[hide_fields] => Array
(
[0] => ctr_ad_headerImg
)
Запись может быть доступна как $cfg["hide_fields"][0]
в PHP. Проблема в том, что функция вывода ini-файла, которую вы выбрали на этот раз, не понимает array
атрибутов.
Поскольку вы, вероятно, заинтересованы в обходных путях вместо использования соответствующего инструмента, примените этот цикл преобразования к вашим ini-данным:
// foreach ($sections ...) maybe
foreach ($cfg as $key=>$value) {
if (is_array($value)) {
foreach ($value as $i=>$v) {
$cfg["$key"."[$i]"] = $v;
}
unset($cfg[$key]);
}
}
И сохраните его впоследствии.
Отредактированный код
function write_php_ini($array, $file)
{
$res = array();
foreach($array as $key => $val)
{
if(is_array($val))
{
$res[] = "[$key]";
foreach($val as $skey => $sval) {
if (is_array($sval)) {
foreach ($sval as $i=>$v) {
$res[] = "{$skey}[$i] = $v";
}
}
else {
$res[] = "$skey = $sval";
}
}
}
else $res[] = "$key = $val";
}
safefilerewrite($file, implode("rn", $res));
}
//////
function safefilerewrite($fileName, $dataToSave)
{
file_put_contents($fileName, $dataToSave, LOCK_EX);
}
Комментарии:
1. это отличный браузер, но я почти не разбираюсь в php, я настоящий новичок, позвольте мне отредактировать мой оригинальный пост с моим кодом и функциями, пожалуйста, направьте меня
2. Только если вы пообещаете, что это ваш самый последний вопрос .ini.
3. я обещаю, что после этого приложение, которое я создавал, будет завершено! Я также обещаю не прекращать изучение php здесь, я буду читать дальше, пока не стану экспертом и полностью не пойму все, что происходит с кодом. Даю вам слово!
4. Смотрите переписанный код. Это разбивает массивы на
key[123]=
записи. Если вам не нужен числовой индекс, то удалите$i
там. Также взял на себя смелость отключить бессмысленную функцию сохранения файла.5. ЭТО РАБОТАЕТ ПОТРЯСАЮЩЕ: D чувак, спасибо тебе ооочень большое! Можете ли вы предложить мне чтение / книгу, чтобы полностью понять, что происходит с вашим кодом?