Адам Адамович
Guest
IniKeeper - критика
Выставляю на критику
Выставляю на критику

PHP:
<?php
/**
* @date: 04.09.2005
* @name: IniKeeper
* @version: 0.4 betta
* @soft: Zend Optimazier, Zend Debugger, Zend Development Environment
* @example: $INI=new IniKeeper();
*/
/**
* @name: IniKeeper
*
*/
class IniKeeper
{
/**
* Расположение INI файла
*
* @var string
*/
var $_FILE_;
/**
* Переменные INI файла
*
* @var array
*/
var $VARS=array();
/**
* Автосохранение INI файла после внесения изменений
*
* @var boolean
*/
var $AUTOSAVE=false;
/**
* Автоматическое создание секции, при присвоении
* значения ключу в несуществующей секции
*
* @var boolean
*/
var $AUTOCREATESECTION=false;
/**
* Защищенный режим INI файла
*
* @var boolean
*/
var $PROTECTMODE=false;
/**
* @desc Инициализация INI файла
*
* @param string $file
* @return boolean
* @version 1.0 betta
*/
function create($file,$autosave=false,$autocreatesection=false)
{
if($autocreatesection) $this->AUTOCREATESECTION=$autocreatesection;
// Если пользователь включил функцию авто создания секции - сделать её глобальной
if($autosave) $this->AUTOSAVE=$autosave;
// Если пользователь включил функцию автосохранения - сделать её глобальной
if($file==='')
// Если имя файла пустое
{
$this->_FILE_=false;
return false;
}
if(!preg_match("/^[a-zA-Zа-яА-Я0-9\/\._-]{0,}$/",$file))
// Если имя файла не правильно
{
$this->_FILE_='';
return false;
}
if(!file_exists($file))
// Если файл отсутствует
{
$this->_FILE_=false;
return false;
}
$this->_FILE_=$file;
// Сделать путь к файлу глобальным
$this->VARS=parse_ini_file($file,true);
// Разбираем INI файл и делаем его переменные глобальными
return true;
}
/**
* Удалить секцию значений
*
* @param string(Секция) $section
* @return boolean
*/
function delSection($section)
{
if (!sectionExist($section)) return false;
// Если секция отсутствует в списке
unset($this->VARS[$section]);
// Удаляем секцию
if($this->AUTOSAVE) $this->save();
// Если автосохранение включено - сохранить
return true;
}
/**
* Удалить ключ
*
* @param string(Секция) $section
* @param string(Ключ) $key
* @return boolean
*/
function delKey($section,$key)
{
if (!sectionExist($section)) return false;
// Если секция есть в списке
if (!keyExist($section,$key)) return false;
// Если ключ есть в списке
unset($this->VARS[$section][$key]);
// Удаляем ключ
if($this->AUTOSAVE) $this->save();
// Если автосохранение включено - сохранить
return true;
}
/**
* Сохранить значения в файл
*
* @param void
* @return boolean
*/
function save()
{
if(!$this->_FILE_) return false;
// Если имя файла небыло объявленно ранее
$fp=fopen($this->_FILE_,"w");
// Открываем для записи
if($this->PROTECTMODE){
$buffer="<?PHP /* \n";
}else{
$buffer='';
}
// Создаем пустой буфер
foreach ( $this->VARS as $section=>$item) {
$buffer.="[$section]\n";
// Сначала записываем в буфер имя секции
foreach ( $item as $key=>$val) {
$buffer.="$key = \"$val\"\n";
// Потом ее содержимое
}
}
if($this->PROTECTMODE){
$buffer.="*/ ?>";
}
fwrite($fp,$buffer);
// Записываем буфер в файл
fclose($fp);
// Закрываем файл
}
/**
* Считать значение ключа секции
*
* @param string(Секция) $section
* @param strong(Ключ) $key
* @return boolean
*/
function getVal($section=null,$key=null,$default=null)
{
if (!sectionExist($section)) return $default;
// Если секция есть в списке
if (!keyExist($section,$key)) return $default;
// Если ключ есть в списке
return $this->VARS[$section][$key];
// Вернем значение ключа
}
/**
* Установить значение ключа
*
* @param string(Секция) $section
* @param string(Ключ) $key
* @param string(Значение) $value
* @return boolean
*/
function setVal($section=null,$key=null,$value=null)
{
if (!sectionExist($section))
{
if($this->AUTOCREATESECTION) {
$this->createSection($section);
}
}else{
return false;
}
// Если секция есть в списке
$this->VARS[$section][$key]=$value;
// Устанавливаем ее значение
if($this->AUTOSAVE) $this->save();
// Если автосохранение включено - сохранить
return true;
}
/**
* Создать новую секцию
*
* @param string(Имя новой секции) $section
* @return boolean
*/
function createSection($section=null)
{
if (sectionExist($section)) return false;
// Если секция есть в списке
array_push($this->VARS,$section);
// Создаем секцию
if($this->AUTOSAVE) $this->save();
// Если автосохранение включено - сохранить
return true;
}
/**
* Прочитать все ключи в секции
*
* @param string(Секция) $section
* @return array(Ключи)
*/
function listKeys($section=null)
{
if (!sectionExist($section)) return false;
// Если секция есть в списке
$buffer=array();
foreach ( $this->VARS[$section] as $key=>$val) {
$buffer[$key]=$val;
// Добавляем значение вбуффер
}
return $buffer;
}
/**
* Прочитать все секции
*
* @return array(Секции)
*/
function listSections()
{
return array_keys($this->VARS);
}
/**
* Проверка существования ключа в секции
*
* @param string(Секция) $section
* @param string(Ключ) $key
* @return boolean
*/
function keyExist($section,$key)
{
if (!sectionExist($section)) return false;
// Если секция есть в списке
if (in_array( $key, array_keys($this->VARS[$section]))===false) return false;
// Если ключ есть в списке
return true;
}
/**
* Проверка существования секции
*
* @param string(Секция) $section
* @return boolean
*/
function sectionExist($section)
{
if (in_array( $section, array_keys($this->VARS))===false) return false;
// Если секция есть в списке
return true;
}
/**
* Отчистить секцию
*
* @param string(Секция) $section
* @param boolean(Создавать ли новую, если небыла создана ранее) $orcreate
* @return boolean
*/
function eraseSection($section,$orcreate=false)
{
if(sectionExist($section))
// Если секция уже есть
{
unset($this->VARS[$section]);
// Удалить существующую
$this->VARS[$section]=array();
// Создать новую
return true;
}else{
if ($orcreate){
$this->VARS[$section]=array();
// Создать новую
return true;
}else{
return false;
}
}
}
/**
* Создать новый INI файл
*
* @param string(Файл) $file
* @param boolean(Указыает, открывать ли файл после создания) $andopen
* @return boolean
*/
function createIni($file,$andopen=false)
{
if(file_exists($file)) return false;
// Если файл есть
$fp=fopen($file,"w+");
// Создать файл
fclose($fp);
// Закрыть файл
if($andopen) $this->create($file,false,false);
// Если включена функция авто открытия - открыть
}
/**
* Обнулить модуль
*
* @return boolean
*/
function free()
{
$this->_FILE_=false;
$this->AUTOCREATESECTION=false;
$this->AUTOSAVE=false;
$this->PROTECTMODE=false;
$this->VARS=array();
return true;
}
}
?>