ini_created = true; } function _ini_handler() { ini_handler::ini_unload(); $this->ini_created = false; } function ini_load() { /* Analiza el archivo y carga secciones y valores. */ $hini = 0; $ini_line = ""; $new_sec_flag = 0; $stuff_cnt = 0; $ini_data = array(); $tmp_stuff = null; $this->num_of_sections = 0; $this->section = array(); if ( $hini = @fopen($this->ini_file,"r") ) { while ( $ini_line = fgets($hini, 1024) ) { $ini_line = trim($ini_line); if ( (strcmp(substr($ini_line,0,1), "[") == 0) && (strcmp(substr($ini_line, strlen($ini_line)-1,1), "]") == 0) ) { if ( $this->num_of_sections > 0 ) { $ini_sec->sec_id = $this->num_of_sections; array_push($this->ini_section,$ini_sec); } $ini_sec = new ini_section; $ini_sec->section_name = substr($ini_line, 1, strlen($ini_line) - 2); $ini_sec->num_of_items = 0; if ($tmp_stuff != null) { $stuff_cnt++; array_push($this->ini_stuff, $tmp_stuff); $ini_sec->stuff_link = $stuff_cnt; $tmp_stuff = null; } $this->num_of_sections++; $new_sec_flag = 1; } if ( $new_sec_flag == 2 ) { $stemp = substr($ini_line, 0, 1); if ( (strlen($ini_line) > 0) && // No es una linea vacía. (strpos($ini_line, "=") > 0) && // Contiene al menos una igualdad. (strcmp($stemp, ";") != 0)) { // No es un comentario. $ini_data = split("=", $ini_line); if ( count($ini_data) > 0 ) { $ini_item = new ini_item; $ini_item->item_name = trim($ini_data[0]); $ini_item->item_data = trim($ini_data[1]); $ini_sec->num_of_items++; $ini_item->item_id = $ini_sec->num_of_items; if ($tmp_stuff != null) { $stuff_cnt++; array_push($this->ini_stuff, $tmp_stuff); $ini_item->stuff_link = $stuff_cnt; } array_push($ini_sec->items, $ini_item); } $tmp_stuff = null; } elseif ( (strlen($ini_line) > 0) ) { if ( $tmp_stuff == null ) { $tmp_stuff = new ini_stuff; } array_push($tmp_stuff->stuff_data, $ini_line.chr(10).chr(13)); $tmp_stuff->stuff_count++; } $new_sec_flag--; } elseif ( $new_sec_flag == 0 ) { if ( $tmp_stuff == null ) { $tmp_stuff = new ini_stuff; } array_push($tmp_stuff->stuff_data, $ini_line.chr(10).chr(13)); $tmp_stuff->stuff_count++; } $new_sec_flag++; } } else { if ( $hini = fopen($this->ini_file, "w") ) { /* Si el archivo no existe, lo crea. */ $this->ini_loaded = true; @fclose($hini); return(true); } return (false); } $ini_sec->sec_id = $this->num_of_sections; array_push($this->ini_section,$ini_sec); $this->ini_loaded = true; return (true); } function ini_unload() { $this->$ini_file = ""; $this->$ini_loaded = false; $this->$ini_section = array(); $this->$num_of_sections = 0; $this->$ini_stuff = array(); $this->$ini_openmode = INI_OPEN_READWRITE; return (true); } function sizeof_section($sec_spec) { $ini_sec = ini_handler::ini_getsection($sec_spec); if ( $ini_sec == null ) return null; $sec_size = strlen($ini_sec->section_name); foreach ($ini_sec->items as $ini_item) { $sec_size += strlen($ini_item->item_name) + strlen($ini_item->item_data) + 1; } return ($sec_size); } function ini_clear() { for ($i = 0; $i < count($this->section); $i++) { array_pop($this->section); } } function ini_getsection($sec_spec) { if (!$this->ini_loaded) return null; foreach ($this->ini_section as $ini_sec) { if ( (is_numeric($sec_spec) && ($sec_spec == $ini_sec->sec_id) ) || (strcmp($sec_spec, $ini_sec->section_name) == 0) ) { return ($ini_sec); } } return (null); } function ini_getitem($sec_spec, $item_spec) { $ini_sec = ini_handler::ini_getsection($sec_spec); if ( $ini_sec == null ) return null; foreach ($ini_sec->items as $ini_item) { if ( (is_numeric($item_spec) && ($item_spec == $ini_item->item_id) ) || (strcmp($item_spec, $ini_item->item_name) == 0) ) { return($ini_item); } } return (null); } function ini_getvalue($sec_spec, $item_spec) { if (!$this->ini_loaded) return null; $ini_item = ini_handler::ini_getitem($sec_spec,$item_spec); if ( $ini_item != null ) { return($ini_item->item_data); } } function ini_setvalue($sec_spec, $item_spec, $new_value) { $ini_sec = ini_handler::ini_getsection($sec_spec); $ini_item = ini_handler::ini_getitem($sec_spec,$item_spec); if ( $ini_item != null ) { $ini_item->item_data = $new_value; $ini_sec->items[$ini_item->item_id - 1] = $ini_item; $this->ini_section[$ini_sec->sec_id - 1] = $ini_sec; return (true); } else { return (false); } } function ini_del_section($sec_spec) { $ini_sec = ini_handler::ini_getsection($sec_spec); if ( $ini_sec == null ) return false; $temp_sec = array(); $i = 1; foreach ($this->ini_section as $ini_sec_new) { if ( $ini_sec->sec_id != $ini_sec_new->sec_id ) { $ini_sec_new->sec_id = $i; array_push($temp_sec, $ini_sec_new); $i++; } } $this->ini_section = array(); $this->ini_section = $temp_sec; $this->num_of_sections--; return (true); } function ini_del_value($sec_spec, $item_spec) { $ini_sec = ini_handler::ini_getsection($sec_spec); $ini_item = ini_handler::ini_getitem($sec_spec,$item_spec); if ( $ini_item == null ) return false; $temp_item = array(); $i = 1; foreach ($ini_sec->items as $ini_item_new) { if ( $ini_item->item_id != $ini_item_new->item_id ) { $ini_item_new->item_id = $i; array_push($temp_item, $ini_item_new); $i++; } } $this->ini_section[$ini_sec->sec_id - 1]->items = array(); $this->ini_section[$ini_sec->sec_id - 1]->items = $temp_item; $this->ini_section[$ini_sec->sec_id - 1]->num_of_items--; return (true); } function ini_set_section_name($sec_spec, $new_name) { $ini_sec = ini_handler::ini_getsection($sec_spec); if ( $ini_sec == null ) return false; $ini_sec->section_name = $new_name; $this->ini_section[$ini_sec->sec_id - 1] = $ini_sec; return (true); } function ini_set_value_name($sec_spec, $item_spec, $new_name) { $ini_sec = ini_handler::ini_getsection($sec_spec); $ini_item = ini_handler::ini_getitem($sec_spec,$item_spec); if ( $ini_item == null ) return false; $ini_item->item_name = $new_name; $ini_sec->items[$ini_item->item_id - 1] = $ini_item; $this->ini_section[$ini_sec->sec_id - 1] = $ini_sec; return (true); } function ini_flush() { if ( $this->ini_openmode != INI_OPEN_READWRITE ) return false; if ( $hini = fopen($this->ini_file,"w") ) { foreach ( $this->ini_section as $ini_sec) { if ( $ini_sec->stuff_link != 0 ) { // Primero guarda los datos anteriores (comentarios). $ini_stuff = $this->ini_stuff[$ini_sec->stuff_link - 1]; foreach($ini_stuff->stuff_data as $stuff_data) { fputs($hini, "$stuff_data".chr(13).chr(10)); } } fputs($hini, "[".$ini_sec->section_name."]".chr(13).chr(10)); foreach ( $ini_sec->items as $ini_item) { if ( $ini_item->stuff_link != 0 ) { // Primero guarda los datos anteriores (comentarios). $ini_stuff = $this->ini_stuff[$ini_item->stuff_link - 1]; foreach($ini_stuff->stuff_data as $stuff_data) { fputs($hini, "$stuff_data".chr(13).chr(10)); } } $stemp = $ini_item->item_name . "=" . $ini_item->item_data.chr(13).chr(10); fputs($hini, "$stemp"); } fputs($hini, chr(13).chr(10)); } fclose($hini); return true; } } function ini_create_section($new_name) { $ini_sec = ini_handler::ini_getsection($new_name); if ( $ini_sec != null ) return (true); $ini_sec = new ini_section; $this->num_of_sections++; $ini_sec->section_name = $new_name; $ini_sec->sec_id = $this->num_of_sections; array_push($this->ini_section, $ini_sec); return (true); } function ini_create_value($sec_spec, $item_name, $item_data) { $ini_sec = ini_handler::ini_getsection($sec_spec); $ini_item = ini_handler::ini_getitem($sec_spec, $item_name); if ( $ini_sec == null ) return false; if ( $ini_item != null ) { ini_handler::ini_setvalue($sec_spec, $item_name, $item_data); return(true); } $ini_item = new ini_item; $ini_sec->num_of_items++; $ini_item->item_name = $item_name; $ini_item->item_data = $item_data; $ini_item->item_id = $ini_sec->num_of_items; array_push($ini_sec->items, $ini_item); $this->ini_section[$ini_sec->sec_id - 1] = $ini_sec; return(true); } } // End of class ?>