Вход Регистрация
Файл: engine/classes/ini.class.php
Строк: 227
<?php
  
/**
   * Класс для чтения и записи ini файла
   * 
   * @package Classes
   * @author Shamsik
   * @link http://shcms.ru
   */ 
  
   
class iniFile{
      
/**
       * (string) Путь и имя ini файла
       */ 
      
public $ini_file;
      
/**
       * (string) Весь ini файл в виде строки (file_get_contents())
       */ 
      
public $ini_data;
      
/**
       *  (array) Содержимое ini файла после работы parse_ini_file(file, true)
       */ 
      
public $ini_array = array();
      
      
/**
       * Для превью ini массива (перед сохранением)
       */ 
       
private $preview;
      
      const 
WRONG_EXT 'У файла должно быть расширение *.ini';
      const 
NOT_FOUND 'Указанный файл не найден';
      const 
WRONG_READ 'Не возможно прочитать указанный файл';
      const 
ERROR_SAVE 'Не могу сохранить файл';
      
/**
       * @param string Путь/имя_файла
       * @return void
       */ 
      
public function __construct($path_to_ini_file){
         
$this->ini_file $path_to_ini_file;        
         
         if(!
preg_match("#.ini$#"$this->ini_file)){
             
$this->Exept(self::WRONG_EXT);       
         }
         else{
            if(
file_exists($this->ini_file)){
                
$this->ini_array parse_ini_file($this->ini_file,true);
                
$this->ini_data file_get_contents($this->ini_file);
            }
         }    
      }
      
      
/**
       * Метод выбрасывает исключения в случае ошибок
       * 
       * @param string - текст исключения
       */ 
      
private function Exept($text){
          throw new 
Exception($text);  
      }
      
      
/**
       * Метод для создания пустого ini файла
       * 
       * @param string Путь/имя_файла
       * @return bool
       */ 
      
public function create(){ 
          return 
file_put_contents($this->ini_file,'');
      }
      
/**
       * Метод вернёт содержимое ini файла в виде строки
       * 
       * @return string
       */ 
      
public function readStringIni(){
          if(!
file_exists($this->ini_file))
              
$this->Exept(self::NOT_FOUND);
          elseif(!
is_readable($this->ini_file))
              
$this->Exept(self::WRONG_READ);
          else{
             return 
$this->ini_data;
          }              
      }
      
/**
       * Метод возвращает распарсенный ini файл
       * 
       * @return array
       */ 
      
public function read(){
          if(!
file_exists($this->ini_file))
              
$this->Exept(self::NOT_FOUND);
          elseif(!
is_readable($this->ini_file))
              
$this->Exept(self::WRONG_READ);
          else{
             return 
$this->ini_array;
          }    
      }   
      
      
/**
       *  Метод добавляет секцию в файл
       * 
       *  @param string - наименовании секции
       *  @return void
       */    
       
public function addSection($namesection){
            
file_put_contents($this->ini_file'['.$namesection.']'.PHP_EOL);
       }
       
      
/**
       *  Метод добавляет параметр в секцию
       * 
       *  @param string - наименовании секции в которую добавляется параметр
       *  @param string - наименование параметра
       *  @param mixid - значение параметра
       *  @return void
       */    
       
public function addParam($namesection$nameparam$value){
            
$this->ini_array[$namesection][$nameparam]= $value;
       }
       
       
       
/**
        * Метод удаляет целую секцию с параметрами 
        * 
        * @param string наиманование секции
        * @param bool  
        *  true - удалить 
        *  false - удалить только из массива - возможность предосмотра метод preview()
        * @return void
        */ 
        
public function deleteSection($namesection$drop=true){
            
             if(
is_array($this->ini_array)){
                foreach(
$this->ini_array as $gen=>$param){
                    if(
$gen != $namesection){
                        foreach(
$param as $p=>$v){  
                             
$change[$gen][$p] = $v;
                        }
                    }    
                }
                
                
$this->preview $change;
             }
             
             if(
$drop === true){
                 
$this->ini_array $this->preview;
                 
$this->save();
             }
        }

       
/**
        * Метод удаляет параметр из указанной секции 
        * 
        * @param string наиманование секции
        * @param string наименование параметра
        * @param bool  
        *  true - удалить 
        *  false - удалить только из массива - возможность предосмотра метод preview()
        * @return void
        */ 
        
public function deleteParam($namesection$paramname$drop=true){
             if(
is_array($this->ini_array)){
                foreach(
$this->ini_array as $gen=>$param){

                    if(
$gen == $namesection){
                        foreach(
$param as $p=>$v){
                            if(
$p != $paramname)
                                 
$change[$gen][$p] = $v
                        }
                    }    
                }
                
                
$this->preview $change;
             }
             
             if(
$drop === true){
                 
$this->ini_array $this->preview;
                 
$this->save();
             }           
        }  
        
        
/**
         * Метод для смены имени секции
         * 
         * @param string старое имя
         * @param string новое имя
         * @param bool  
         *  true - удалить 
         *  false - удалить только из массива - возможность предосмотра метод preview()
         * 
         *  @return void   
         */
         
public function changeSectionName($oldname$newname,$change=true){
             if(
is_array($this->ini_array)){
                foreach(
$this->ini_array as $gen=>$param){
                    if(
$gen == $oldname)
                        
$gen $newname;

                    foreach(
$param as $p=>$v){
                         
$change[$gen][$p] = $v;
                    }

                }
                
                
$this->preview $change;
             }
             
             if(
$change === true){
                 
$this->ini_array $this->preview;
                 
$this->save();
             }            
         } 

        
/**
         * Метод для смены имени параметра секции
         * 
         * @param string имя секции
         * @param string старое имя
         * @param string новое имя
         * @param bool  
         *  true - удалить 
         *  false - удалить только из массива - возможность предосмотра метод preview()
         * 
         *  @return void   
         */
         
public function changeParamName($namesection$oldname$newname,$change=true){
            
             if(
is_array($this->ini_array)){
                foreach(
$this->ini_array as $gen=>$param){
                    if(
$gen == $namesection){
                        foreach(
$param as $p=>$v){
                             if(
$p == $oldname)
                                 
$p $newname;
                             
                             
$change[$gen][$p] = $v;
                        }
                    }
                }

                
$this->preview $change;
             }
             
             if(
$change === true){
                 
$this->ini_array $this->preview;
                 
$this->save();
             }            
         } 
        
        
/**
         * Метод для изменения значения параметра конкретной секции
         * 
         * @param string имя секции
         * @param string имя параметра
         * @param string новое значение
         * @param bool  
         *  true - удалить 
         *  false - удалить только из массива - возможность предосмотра метод preview()
         *   
         * @return void
         */       
        
public function changeParamValue($namesection$nameparam$newvalue,$set=true){
             if(
is_array($this->ini_array)){
                foreach(
$this->ini_array as $gen=>$param){
                    if(
$gen == $namesection){
                        foreach(
$param as $p=>$v){
                             if(
$p == $nameparam)
                                 
$v $newvalue;
                             
                             
$change[$gen][$p] = $v;
                        }
                    }
                }

                
$this->preview $change;
             }
             
             if(
$set === true){
                 
$this->ini_array $this->preview;
                 
$this->save();
             }              
        }
        
        
        
/**
         * Метод для мониторинга изменений массива ini файла во время 
         * редактирования с помощью класса
         * 
         * @return array
         */ 
        
public function preview(){
                return 
$this->preview;
        }
       
       
/**
        * Метод сохраняет добавленные секции и параметры в файл
        * 
        * @return bool
        */        
        
public function save(){
            
            if(
is_array($this->ini_array)){
                
$string =  '';
                foreach(
$this->ini_array as $gen=>$param){
                     
$string .= '['.$gen.']'.PHP_EOL;

                     foreach(
$param as $p=>$v){
                        
$string .= $p.'='.$v.PHP_EOL;
                     }
                }
                if(!
file_put_contents($this->ini_file,$string)){
                   
$this->Exept(self::ERROR_SAVE);
                   return 
false;
                }   
                          
            }
            
            return 
true;  
        }
   }
Онлайн: 1
Реклама