parse_ini_file的问题

时间:2011-04-18 23:15:50

标签: 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("\r\n", $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 个答案:

答案 0 :(得分:2)

Parse_ini_file()会处理此类标识符。它在读取ini文件时正确地将它们转换为数组:

 print_r(parse_ini_string("hide_fields[] = ctr_ad_headerImg"));

将生成:

Array
(
    [hide_fields] => Array
        (
            [0] => ctr_ad_headerImg
        )

可以在PHP中以$cfg["hide_fields"][0]访问该条目。问题是你这次选择的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("\r\n", $res));
}

//////
function safefilerewrite($fileName, $dataToSave)
{    
    file_put_contents($fileName, $dataToSave, LOCK_EX);    
}