创buildini文件,在PHP中写入值

我无法find一种轻松让我创build一个新文件的方式,将其视为一个ini文件(不是php.ini或类似的…每个用户一个单独的ini文件),并使用PHP创build/删除值。 PHP似乎没有提供简单的方法来创buildini文件和读取/写入/删除值。 到目前为止,这只是“阅读” – 没有关于创build条目或操纵键/值。

从PHP文档的注释中find下面的代码片段:

 function write_ini_file($assoc_arr, $path, $has_sections=FALSE) { $content = ""; if ($has_sections) { foreach ($assoc_arr as $key=>$elem) { $content .= "[".$key."]\n"; foreach ($elem as $key2=>$elem2) { if(is_array($elem2)) { for($i=0;$i<count($elem2);$i++) { $content .= $key2."[] = \"".$elem2[$i]."\"\n"; } } else if($elem2=="") $content .= $key2." = \n"; else $content .= $key2." = \"".$elem2."\"\n"; } } } else { foreach ($assoc_arr as $key=>$elem) { if(is_array($elem)) { for($i=0;$i<count($elem);$i++) { $content .= $key."[] = \"".$elem[$i]."\"\n"; } } else if($elem=="") $content .= $key." = \n"; else $content .= $key." = \"".$elem."\"\n"; } } if (!$handle = fopen($path, 'w')) { return false; } $success = fwrite($handle, $content); fclose($handle); return $success; } 

用法:

 $sampleData = array( 'first' => array( 'first-1' => 1, 'first-2' => 2, 'first-3' => 3, 'first-4' => 4, 'first-5' => 5, ), 'second' => array( 'second-1' => 1, 'second-2' => 2, 'second-3' => 3, 'second-4' => 4, 'second-5' => 5, )); write_ini_file($sampleData, './data.ini', true); 

祝你好运!

PEAR有两个(unit testing)的软件包,可以完成您渴望的任务:

  • Config_Lite – 如果你只想要.ini文件,那么理想
  • configuration – 读取.php.xml文件

我宁愿使用testing过的代码,而不是写自己的代码。

我不能保证它的工作效果如何,但是在parse_ini_file()的文档页面上实现与parse_ini_file()相反的一些build议(即write_ini_file ,这不是标准的PHP函数)。

您可以使用write_ini_file将值发送到文件, parse_ini_file将其读回 – 修改parse_ini_file返回的关联数组,然后使用write_ini_file将修改后的数组写回文件。

那对你有用吗?

在这部分代码中:

 else { foreach ($assoc_arr as $key=>$elem) { if(is_array($elem)) { for($i=0;$i<count($elem);$i++) { $content .= $key2."[] = \"".$elem[$i]."\"\n"; } } else if($elem=="") $content .= $key2." = \n"; else $content .= $key2." = \"".$elem."\"\n"; } } 

$ key2必须被$ keyreplace,否则你会在.ini中find空的键

基于上面的答案,我写了这个类可能是有用的。 对于PHP 5.3,但可以很容易地适应以前的版本。

 class Utils { public static function write_ini_file($assoc_arr, $path, $has_sections) { $content = ''; if (!$handle = fopen($path, 'w')) return FALSE; self::_write_ini_file_r($content, $assoc_arr, $has_sections); if (!fwrite($handle, $content)) return FALSE; fclose($handle); return TRUE; } private static function _write_ini_file_r(&$content, $assoc_arr, $has_sections) { foreach ($assoc_arr as $key => $val) { if (is_array($val)) { if($has_sections) { $content .= "[$key]\n"; self::_write_ini_file_r(&$content, $val, false); } else { foreach($val as $iKey => $iVal) { if (is_int($iKey)) $content .= $key ."[] = $iVal\n"; else $content .= $key ."[$iKey] = $iVal\n"; } } } else { $content .= "$key = $val\n"; } } } } 

我用这个,它似乎工作

 function listINIRecursive($array_name, $indent = 0) { global $str; foreach ($array_name as $k => $v) { if (is_array($v)) { for ($i=0; $i < $indent * 5; $i++){ $str.= " "; } $str.= " [$k] \r\n"; listINIRecursive($v, $indent + 1); } else { for ($i=0; $i < $indent * 5; $i++){ $str.= " "; } $str.= "$k = $v \r\n"; } } } 

它将返回要写入.ini文件的文本