Simple class that supports reading sections, single values, and arrays from INI files. from phpbuilder.com varel
<? // filename: class.inifile.php // author: victor m varela (victor@netims.com) // comment: *.ini file reader for PHP // license: LGPL // date: mié oct 25 10:20:10 CEST 2000 // // vie oct 27 12:25:48 CEST 2000 // 1.01 recognize some bool values (true, false, yes, no, on, off) // // vie oct 27 16:00:36 CEST 2000 // 1.02 bugfix: false value was returning default value // // lun oct 30 11:55:38 CET 2000 // 1.03 cached engine added // // dom dic 3 04:04:36 CET 2000 // 1.04 bug with "=" symbol fixed // David P. Schwartz (davids@desertigloo.com) // // valid formats: // // [my-section] // # single values // var1 = value1 // var2=value 2 // var3 = 'value 3' // ; if we use values between ' or ", they are not trimmed // var4=" value 4" // // ; setting an array // var_array1 = this is var_array1[0] // var_array1 = this is var_array1[1] // var_array1 = this is var_array1[2] // // sample_var = this is a = symbol //
// constructor function IniFile ($filename) { global $iniCachedValues, $iniCachedSections, $iniCachedFilenames; $section = ""; $this->filename = $filename; if (file_exists($filename) and ! isset($iniCachedFilenames[$filename])) { $iniCachedFilenames[$filename] = $filename; $lines = file($filename); for ($i = 0; $i < count($lines); $i++) { $lines[$i] = trim($lines[$i]); if ($lines[$i][0] == ';' || $lines[$i][0] == '#') { // it's a commment continue; } elseif (ereg("^/[(.*)/]", $lines[$i], $regs)) { // new section $section = strtolower(trim($regs[1])); $iniCachedSections[$filename][] = trim($regs[1]); } elseif (preg_match("'^(.*?)[/s]*=[/s]*(.*)'", $lines[$i], $regs)) { // setting variable $variable = strtolower(trim($regs[1])); $value = trim($regs[2]); if (ereg("^[/"'](.*)[/"']$", $value, $regs)) { $value = $regs[1]; } $lower_value = strtolower($value); if (in_array($lower_value, array('true', 'yes', 'on'))) { $value = 1; } elseif (in_array($lower_value, array('false', 'no', 'off'))) { $value = 0; } if (! isset($iniCachedValues[$filename][$section][$variable])) { // new variable $iniCachedValues[$filename][$section][$variable] = $value; } elseif (gettype($iniCachedValues[$filename][$section][$variable]) == "array") { // append new element to array $iniCachedValues[$filename][$section][$variable][] = $value; } else { // two values for a single variable, convert to array $ovalue = $iniCachedValues[$filename][$section][$variable]; $iniCachedValues[$filename][$section][$variable] = array($ovalue,$value); } } } } }
// returns file name function fileName () { return $this->filename; }
// returns all sections function readSections () { global $iniCachedSections; echo serialize($iniCachedSections); return $iniCachedSections[$this->filename]; }
// returns all (variable,value) pairs for a section function readSection ($section) { global $iniCachedValues; return $iniCachedValues[$this->filename][strtolower($section)]; }
// returns a value function value($section, $variable, $default) { global $iniCachedValues; $section = strtolower($section); $variable = strtolower($variable); if (isset($iniCachedValues[$this->filename][$section][$variable])) { return $iniCachedValues[$this->filename][$section][$variable]; } else { return $default; } } }