All pastes #543529 Raw Edit

Unnamed

public php v1 · immutable
·published 2007-06-06 03:14 UTC
rendered paste body
<?phpdefine("INI_OPEN_READONLY", 1);   // Abrir como solo-lectura.define("INI_OPEN_READWRITE", 2);  // Abrir para lectura-escritura.define("INI_RAW_WRITE", 8);       // Escribir los cambios directamente al archivo.class ini_item {  var $item_id = 0;  var $item_name = "";  var $item_data = "";  var $stuff_link = 0;}// End of classclass ini_section {  var $sec_id = 0;  var $section_name = "";  var $num_of_items = 0;  var $items = array();  var $stuff_link = 0;}// End of classclass ini_stuff {  var $stuff_data = array();  var $stuff_count = 0;}// End of classclass ini_handler {  var $ini_file = "";                       // Ruta de acceso y nombre del archivo.  var $ini_created = false;                 // Indica si el objeto se creó correctamente (debugging purposes :P).  var $ini_loaded = false;                  // Indica si el archivo está cargado.  var $ini_section = array();               // Secciones del archivo.  var $num_of_sections = 0;                 // Cantidad de secciones en el archivo.  var $ini_stuff = array();                 // Comentarios.  var $ini_openmode = INI_OPEN_READWRITE;   // Modo de apertura.  function ini_handler() {    $this->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?>