home *** CD-ROM | disk | FTP | other *** search
- PHP INI File Class
-
- A Simple Ini File Implementation to keep settings in a simple file instead of in a DB.
-
- <?
- /////////////////////////////////////////////////////////////////////////
- //
- // 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;
- }
- }
- ?>
-