php操作ini文件

64 阅读1分钟

在 PHP 中,虽然有内置的parse_ini_file()和parse_ini_string()函数用于解析 INI 文件,但这些函数对 INI 格式的支持有限(例如,不支持嵌套节)。因此,我们可以自定义一组函数来实现对 INI 文件的增删查改操作。


  1. 读取 INI 文件(查)

【php】 /**

  • 读取 INI 文件并返回关联数组

  • @param string $filename INI 文件路径

  • @return array 解析后的数组 */ function read_ini_file(filename) { if (!file_exists(filename)) { return []; }

    lines=file(lines = file(filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); data=[];data = []; currentSection = null;

    foreach (linesaslines as line) { line=trim(line = trim(line); // 跳过注释行 if (empty(line)strstartswith(line) || str_starts_with(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=readinifile(config.ini);printr(config = read_ini_file('config.ini'); print_r(config);


  1. 写入 INI 文件(增 / 改)

【php】 /**

  • 将数组写入 INI 文件

  • @param string $filename INI 文件路径

  • @param array $data 要写入的数据

  • @return bool 是否写入成功 */ function write_ini_file(filename,filename, data) { $content = '';

    foreach (dataasdata as section => values) { if (is_array(values)) { // 写入节 content.="[content .= "[section]\n"; foreach (valuesasvalues as key => value) { content .= "key=key = value\n"; } content .= "\n"; } else { // 写入全局键值对(无节) content .= "section=section = values\n"; } }

    return file_put_contents(filename,filename, content) !== false; }

示例用法:

【php】 $config = [ 'database' => [ 'host' => 'localhost', 'username' => 'root', 'password' => '123456', ], 'app' => [ 'name' => 'MyApp', 'debug' => 'true', ], ];

write_ini_file('config.ini', $config);


  1. 修改 INI 文件(改)

【php】 /**

  • 修改 INI 文件中的某个值

  • @param string $filename INI 文件路径

  • @param string $section 节名(null 表示全局键)

  • @param string $key 键名

  • @param string $value 新值

  • @return bool 是否修改成功 */ function update_ini_value(filename,filename, section, key,key, value) { data=readinifile(data = read_ini_file(filename);

    if (section === null) { // 修改全局键 data[key]=key] = value; } else { // 修改节内的键 data[data[section][key]=key] = value; }

    return write_ini_file(filename,filename, data); }

示例用法:

【php】 update_ini_value('config.ini', 'database', 'password', 'new_password'); update_ini_value('config.ini', null, 'app_name', 'NewApp'); // 修改全局键


  1. 删除 INI 文件中的键(删)

【php】 /**

  • 删除 INI 文件中的某个键

  • @param string $filename INI 文件路径

  • @param string $section 节名(null 表示全局键)

  • @param string $key 键名

  • @return bool 是否删除成功 */ function delete_ini_key(filename,filename, section, key) { data = read_ini_file($filename);

    if (section === null) { // 删除全局键 unset(data[key]); } else { // 删除节内的键 unset(data[section][section][key]); // 如果节为空,可以删除整个节(可选) if (empty(data[data[section])) { unset(data[data[section]); } }

    return write_ini_file(filename,filename, data); }

示例用法:

【php】 delete_ini_key('config.ini', 'database', 'password'); delete_ini_key('config.ini', null, 'app_name'); // 删除全局键


  1. 完整示例

【php】 // 读取 config=readinifile(config.ini);printr(config = read_ini_file('config.ini'); print_r(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=readinifile(config.ini);printr(config = read_ini_file('config.ini'); print_r(config);


总结

【表格】 操作 函数 读取 INI 文件 read_ini_file(filename)写入INI文件writeinifile(filename) 写入 INI 文件 write_ini_file(filename, data)修改INIupdateinivalue(data) 修改 INI 值 update_ini_value(filename, section,section, key, value)删除INIdeleteinikey(value) 删除 INI 键 delete_ini_key(filename, section,section, key)

这些函数提供了对 INI 文件的完整增删查改支持,适用于大多数 PHP 项目。如果需要更复杂的 INI 解析(如支持嵌套节),可以考虑使用第三方库(如Symfony\Component\Config)。