| 
<?php
 # ini handler class
 # coded by Alessandro Rosa
 # e-mail : [email protected]
 # site : http://malilla.supereva.it
 
 # Copyright (C) 2006  Alessandro Rosa
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 3 of the License, or
 # any later version.
 
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
 # Compiled with PHP 4.4.0
 
 function specialchars_back( $sText )
 {
 $sText = str_replace( "\'", "'", $sText ) ;
 $sText = str_replace( "\\\"", "\"", $sText ) ;
 
 return $sText ;
 }
 
 function specialchars_forward( $sText )
 {
 $sText = str_replace( "'", "\'", $sText ) ;
 $sText = str_replace( "\"", "\\\"", $sText ) ;
 
 return $sText ;
 }
 
 
 class ini_manager
 {
 function ini_manager()
 {
 $info = strtolower( $_SERVER['HTTP_USER_AGENT'] );
 
 $this->crlf = ( strpos( $info, "windows" ) === false ) ? "\n" : "\r\n" ;
 
 unset( $this->bi_a );
 }
 
 // Implementation of parse_ini_file
 // by Hugo Gonçalves ([email protected])
 
 function parse_ini_file($filename)
 {
 // Alocate the result array
 $res = array();
 // Does the file exists and can we read it?
 if(file_exists($filename) && is_readable($filename))
 {
 // In the beggining we are not in a section
 $section = "";
 // Open the file
 $fd = @fopen($filename,"r");
 // Read each line
 while(!feof($fd))
 {
 // Read the line and trim it
 $line = trim(@fgets($fd, 4096 ));
 $len = strlen($line);
 // Only process non-blank lines
 if($len != 0)
 {
 // Only process non-comment lines
 if($line[0] != ';')
 {
 // Found a section?
 if(($line[0] == '[') && ($line[$len-1] == ']'))
 {
 // Get section name
 $section = substr($line,1,$len-2);
 // Check if the section is already included in result array
 if(!isset($res[$section]))
 {
 // If not included create it
 $res[$section] = array();
 }
 }
 // Check for entries
 $pos = strpos($line,'=');
 // Found an entry
 if($pos != false)
 {
 // Get name of entry
 $name = substr($line,0,$pos);
 // Get value of entry
 $value = substr($line,$pos+1,$len-$pos-1);
 // Store entry
 // If we are inside a section
 if($section != "")
 {
 $res[$section][$name] = specialchars_forward( $value );
 }
 else
 {
 $res[$name] = $value;
 }
 }
 }
 }
 }
 // Close the file
 @fclose($fd);
 }
 return $res;
 }
 
 function show_ini( $path )
 {
 $this->filePATH = $path ;
 $INIarray = $this->parse_ini_file( $path );
 
 $fileCONTENTS = "" ;
 
 $c1 = 0 ;
 foreach ($INIarray as $i => $a)
 {
 $c2 = 0 ;
 foreach ($a as $n => $value)
 {
 if ( $c2 == 0 ) $fileCONTENTS .= "[$i]<br/>$this->CRLF$n=$value<br/>$this->CRLF";
 else if ( strlen( $value ) != 0 ) $fileCONTENTS .= "$n=$value<br/>$this->CRLF";
 $c2++;
 }
 
 $fileCONTENTS .= "<br/>$this->CRLF" ;
 }
 
 $fileCONTENTS = substr( $fileCONTENTS, 0, strlen( $fileCONTENTS ) - ( 5 + strlen( "<br/>" ) ) );
 
 echo "<code>$fileCONTENTS</code>" ;
 }
 
 function save_ini( $path )
 {
 $fileCONTENTS = "" ;
 
 $c1 = 0 ;
 foreach ($this->bi_a as $i => $a)
 {
 $c2 = 0 ;
 foreach ($a as $n => $value)
 {
 if ( $c2 == 0 ) $fileCONTENTS .= "[$i]$this->crlf$n=$value$this->crlf";
 else if ( strlen( $value ) != 0 ) $fileCONTENTS .= "$n=$value$this->crlf";
 $c2++;
 }
 
 $fileCONTENTS .= $this->crlf ;
 }
 
 $hFile = @fopen( $path, "w+" );
 @fwrite( $hFile, $fileCONTENTS );
 @fclose( $hFile );
 
 unset( $this->bi_a );
 }
 
 //////////////////////////////////////////////////////////
 function find_entry( $path, $keyNAME, $entryNAME )
 {
 $this->filePATH = $path ;
 $INIarray = parse_ini_file( $path , true );
 
 foreach ($INIarray as $i => $a)
 {
 foreach ($a as $n => $value)
 {
 if ( strcmp( $i, $keyNAME ) == 0 && strcmp( $n, $entryNAME ) == 0 )
 {
 return true ;
 }
 }
 }
 
 return false ;
 }
 //////////////////////////////////////////////////////////
 function get_entry( $path, $keyNAME, $entryNAME )
 {
 $this->filePATH = $path ;
 $INIarray = $this->parse_ini_file( $path );
 
 foreach ($INIarray as $i => $a)
 {
 foreach ($a as $n => $value)
 {
 if ( strcmp( $i, $keyNAME ) == 0 && strcmp( $n, $entryNAME ) == 0 )
 {
 return specialchars_back( $value ) ;
 }
 }
 }
 
 return "" ;
 }
 //////////////////////////////////////////////////////////
 function add_entry( $path, $keyNAME, $entryNAME, $entryVALUE )
 {
 if ( $this->find_entry( $path, $keyNAME, $entryNAME ) )
 {
 $this->set_entry( $path, $keyNAME, $entryNAME, $entryVALUE ) ;
 return ;
 }
 
 $this->filePATH = $path ;
 $INIarray = parse_ini_file( $path , true );
 
 $this->bi_a = array();
 
 $bKEYfound = false ;
 $bKEYadded = false ;
 
 foreach ($INIarray as $i => $a)
 {
 foreach ($a as $n => $value)
 {
 if ( strcmp( $i, $keyNAME ) == 0 ) $bKEYfound = true ;
 
 $this->bi_a[$i][$n] = $a[$n] ;
 }
 
 if ( $bKEYfound )
 {
 $this->bi_a[$i][$entryNAME] = $entryVALUE ;
 $bKEYfound = false ;
 $bKEYadded = true ;
 }
 }
 
 if ( !$bKEYadded ) $this->bi_a[$keyNAME][$entryNAME] = $entryVALUE ;
 
 $this->save_ini( $path );
 }
 
 
 //////////////////////////////////////////////////////////
 function set_entry( $path, $keyNAME, $entryNAME, $entryVALUE )
 {
 $this->filePATH = $path ;
 $INIarray = parse_ini_file( $path , true );
 
 $this->bi_a = array();
 
 foreach ($INIarray as $i => $a)
 {
 foreach ($a as $n => $value)
 {
 if ( strcmp( $i, $keyNAME ) == 0 && strcmp( $n, $entryNAME ) == 0 )
 {
 $this->bi_a[$i][$n] = specialchars_forward( $entryVALUE );
 }
 else $this->bi_a[$i][$n] = $a[$n] ;
 }
 }
 
 $this->save_ini( $path );
 }
 
 //////////////////////////////////////////////////////////
 function delete_entry( $path, $keyNAME, $entryNAME )
 {
 $this->filePATH = $path ;
 $INIarray = parse_ini_file( $path , true );
 
 $this->bi_a = array();
 
 foreach ($INIarray as $i => $a)
 {
 foreach ($a as $n => $value)
 {
 if ( strcmp( $i, $keyNAME ) == 0 && strcmp( $n, $entryNAME ) == 0 )
 {
 // don't do anything !
 }
 else $this->bi_a[$i][$n] = $a[$n] ;
 }
 }
 
 $this->save_ini( $path );
 }
 
 function delete_key( $path, $keyNAME )
 {
 $this->filePATH = $path ;
 $INIarray = parse_ini_file( $path , true );
 
 $this->bi_a = array();
 
 foreach ($INIarray as $i => $a)
 {
 foreach ($a as $n => $value)
 {
 if ( strcmp( $i, $keyNAME ) == 0 )
 {
 // don't do anything !
 }
 else $this->bi_a[$i][$n] = $a[$n] ;
 }
 }
 
 $this->save_ini( $path );
 }
 
 var $bi_a ;
 var $filePATH ;
 var $crlf ;
 }
 
 ?>
 
 |