我找不到一种方法可以轻松地让我创建一个新文件,将其视为一个 ini 文件(不是 php.ini 或类似的......每个用户的单独 ini 文件),并使用 PHP 创建/删除值。PHP 似乎没有提供简单的方法来创建 ini 文件和读取/写入/删除值。到目前为止,这一切都只是“读取”——与创建条目或操作键/值无关。
问问题
55991 次
6 回答
54
从 PHP 文档的注释中找到以下代码片段:
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);
祝你好运!
于 2009-08-12T20:45:46.450 回答
7
我不能保证它工作得有多好,parse_ini_file()
但是write_ini_file
在parse_ini_file
.
您可以使用write_ini_file
将值发送到文件,parse_ini_file
将它们读回 - 修改parse_ini_file
返回的关联数组,然后将修改后的数组用write_ini_file
.
那对你有用吗?
于 2009-08-12T20:08:40.203 回答
7
PEAR 有两个(经过单元测试的)包可以完成您渴望的任务:
- Config_Lite - 如果你只想要
.ini
文件的理想选择 - 配置- 也读取
.php
和.xml
文件
我宁愿使用经过良好测试的代码,也不愿编写自己的代码。
于 2011-04-18T10:54:18.173 回答
5
在这部分代码中:
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 必须替换为 $key 否则您会在 .ini 中找到空键
于 2010-09-30T13:15:36.263 回答
3
基于上述答案,我编写了这个可能有用的课程。适用于 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";
}
}
}
}
于 2012-03-02T00:27:13.293 回答
2
我用这个,它似乎工作
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 文件的文本
于 2012-01-27T20:06:36.517 回答