<? ///////////////////////////////////////////////////////////////////////// // // class.INIFile.php3 - implements a simple INIFile Parser // /// Author : Mo
// // Description: // I just wandered how to sawe simple parameters not in a database but in a file // So starting every time from scratch isn't comfortable and I desided to write this // small unit for workin with ini like files // Some Examples: // // $ini = new INIFile("./ini.ini"); // //Read entire group in an associative array // $grp = $ini->read_group("MAIN"); // //prints the variables in the group // if ($grp) // for(reset($grp); $key=key($grp); next($grp)) // { // echo "GROUP ".$key."=".$grp[$key]."<br>"; // } // //set a variable to a value // $ini->set_var("NEW","USER","JOHN"); // //Save the file // $ini->save_data(); class INIFile { var $INI_FILE_NAME = ""; var $ERROR = ""; var $GROUPS = array(); var $CURRENT_GROUP = ""; function INIFile($inifilename="") { if(!empty($inifilename)) if(!file_exists($inifilename)){ $this->error("This file does not exist!"); return; } $this->parse($inifilename); } // LOAD AND SAVE FUNCTIONS function parse($inifilename) { $this->INI_FILE_NAME = $inifilename; $fp = fopen($inifilename, "r+"); $contents = fread($fp, filesize($inifilename)); $ini_data = split("\n",$contents); while(list($key, $data) = each($ini_data)) { $this->parse_data($data); } fclose($fp); } function parse_data($data) { if(ereg("\[([[:alnum:]]+)\]",$data,$out)) { $this->CURRENT_GROUP=$out[1]; } else { $split_data = split("=", $data); $this->GROUPS[$this->CURRENT_GROUP][$split_data[0]]=$split_data[1]; } } function save_data() { $fp = fopen($this->INI_FILE_NAME,"w"); if(empty($fp)) { $this->Error("Cannot create file $this->INI_FILE_NAME"); return false; } $groups = $this->read_groups(); $group_cnt = count($groups); for($i=0; $i<$group_cnt; $i++) { $group_name = $groups[$i]; $res = sprintf("[%s]\n",$group_name); fwrite($fp, $res); $group = $this->read_group($group_name); for(reset($group); $key=key($group);next($group)) { $res = sprintf("%s=%s\n",$key,$group[$key]); echo $res."\n"; fwrite($fp,$res); } } fclose($fp); } // FUNCTIONS FOR GROUPS //returns number of groups function get_group_count() { return count($this->GROUPS); } //returns an array with the names of all the groups function read_groups() { $groups = array(); for(reset($this->GROUPS);$key=key($this->GROUPS);next($this->GROUPS)) $groups[]=$key; return $groups; } //checks if a group exists function group_exists($group_name) { $group = $this->GROUPS[$group_name]; if (empty($group)) return false; else return true; } //returns an associative array of the variables in one group function read_group($group) { $group_array = $this->GROUPS[$group]; if(!empty($group_array)) return $group_array; else { $this->Error("Group $group does not exist"); return false; } } //adds a new group function add_group($group_name) { $new_group = $this->GROUPS[$group_name]; if(empty($new_group)) { $this->GROUPS[$group_name] = array(); } else $this->Error("Group $group_name exists"); } // FUNCTIONS FOR VARIABLES //reads a single variable from a group function read_var($group, $var_name) { $var_value = $this->GROUPS[$group][$var_name]; if(!empty($var_value)) return $var_value; else { $this->Error("$var_name does not exist in $group"); return false; } } //sets a variable in a group function set_var($group, $var_name, $var_value) { if ($this->group_exists($group)) $this->GROUPS[$group][$var_name]=$var_value; } // ERROR FUNCTION function Error($errmsg) { $this->ERROR = $errmsg; echo "Error:".$this->ERROR."<br>\n"; return; } } ?>
Comments
Post a Comment