在 PHP 中,虽然有内置的parse_ini_file()和parse_ini_string()函数用于解析 INI 文件,但这些函数对 INI 格式的支持有限(例如,不支持嵌套节)。因此,我们可以自定义一组函数来实现对 INI 文件的增删查改操作。
- 读取 INI 文件(查)
【php】 /**
-
读取 INI 文件并返回关联数组
-
@param string $filename INI 文件路径
-
@return array 解析后的数组 */ function read_ini_file(filename) { if (!file_exists(filename)) { return []; }
filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); currentSection = null;
foreach (line) { line); // 跳过注释行 if (empty(line, ';') || str_starts_with($line, '#')) { continue; }
// 处理节([section]) if (str_starts_with($line, '[') && str_ends_with($line, ']')) { $currentSection = trim($line, '[]'); if (!isset($data[$currentSection])) { $data[$currentSection] = []; } continue; } // 处理键值对(key = value) $parts = explode('=', $line, 2); if (count($parts) === 2) { $key = trim($parts[0]); $value = trim($parts[1]); if ($currentSection !== null) { $data[$currentSection][$key] = $value; } else { $data[$key] = $value; } }}
return $data; }
示例用法:
【php】 config);
- 写入 INI 文件(增 / 改)
【php】 /**
-
将数组写入 INI 文件
-
@param string $filename INI 文件路径
-
@param array $data 要写入的数据
-
@return bool 是否写入成功 */ function write_ini_file(data) { $content = '';
foreach (section => values) { if (is_array(values)) { // 写入节 section]\n"; foreach (key => value) { content .= "value\n"; } content .= "\n"; } else { // 写入全局键值对(无节) content .= "values\n"; } }
return file_put_contents(content) !== false; }
示例用法:
【php】 $config = [ 'database' => [ 'host' => 'localhost', 'username' => 'root', 'password' => '123456', ], 'app' => [ 'name' => 'MyApp', 'debug' => 'true', ], ];
write_ini_file('config.ini', $config);
- 修改 INI 文件(改)
【php】 /**
-
修改 INI 文件中的某个值
-
@param string $filename INI 文件路径
-
@param string $section 节名(null 表示全局键)
-
@param string $key 键名
-
@param string $value 新值
-
@return bool 是否修改成功 */ function update_ini_value(section, value) { filename);
if (section === null) { // 修改全局键 data[value; } else { // 修改节内的键 section][value; }
return write_ini_file(data); }
示例用法:
【php】 update_ini_value('config.ini', 'database', 'password', 'new_password'); update_ini_value('config.ini', null, 'app_name', 'NewApp'); // 修改全局键
- 删除 INI 文件中的键(删)
【php】 /**
-
删除 INI 文件中的某个键
-
@param string $filename INI 文件路径
-
@param string $section 节名(null 表示全局键)
-
@param string $key 键名
-
@return bool 是否删除成功 */ function delete_ini_key(section, key) { data = read_ini_file($filename);
if (section === null) { // 删除全局键 unset(data[key]); } else { // 删除节内的键 unset(data[key]); // 如果节为空,可以删除整个节(可选) if (empty(section])) { unset(section]); } }
return write_ini_file(data); }
示例用法:
【php】 delete_ini_key('config.ini', 'database', 'password'); delete_ini_key('config.ini', null, 'app_name'); // 删除全局键
- 完整示例
【php】 // 读取 config);
// 修改 update_ini_value('config.ini', 'database', 'host', '127.0.0.1');
// 添加新键 update_ini_value('config.ini', 'database', 'port', '3306');
// 删除键 delete_ini_key('config.ini', 'database', 'password');
// 重新读取验证 config);
总结
【表格】 操作 函数 读取 INI 文件 read_ini_file(filename, filename, key, filename, key)
这些函数提供了对 INI 文件的完整增删查改支持,适用于大多数 PHP 项目。如果需要更复杂的 INI 解析(如支持嵌套节),可以考虑使用第三方库(如Symfony\Component\Config)。