问题描述
|
我正在使用parse_ini_file()读取具有以下行的ini文件:
[admin]
hide_fields[] = ctr_ad_headerImg
问题是它输出像
[admin]
hide_fields = Array
有人可以帮我吗?如何像字符串一样读取\“ hide_fields [] \”?
最好的祝福
约里坎
我的代码是:
$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);
}
}
解决方法
Parse_ini_file()
处理此类标识符。在读取ini文件时,它将正确地将它们转换为数组:
print_r(parse_ini_string(\"hide_fields[] = ctr_ad_headerImg\"));
将产生:
Array
(
[hide_fields] => Array
(
[0] => ctr_ad_headerImg
)
可以在PHP中以“ 7”访问该条目。问题是您这次选择的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);
}