PHP DevelStudio - Работаем с файлами INI в PHP
 

Создание программ

Полноценная среда программирования php , которая позволяет создавать exe программы на языке PHP с поддержкой GUI или без программирования, с помощью различных мастеров.
 

DevelStudio v3.0 beta конструктор программ

 

Проекты

Работаем с файлами INI в PHP

INI файл часто используют для сохранения настроек в простом виде. Использование его вместо xml формата довольно оправдано, потому что его легче редактировать, он более понятен новичку. В php есть встроенная функция для чтения информации из файлов ini, но нет функционала для записи информации ini.

Для чтения информации из ini можно использовать простую функцию:


// обязательно указываем вторым параметром true
$info = parse_ini_file('config.ini', true);
echo $info['main']['key'];

А в ini файле у нас следующее:


[main]
key=value

Надо не забывать, что ini формат не поддерживает перенос на новую строку в значениях, это один из недостатков.

Запись и чтение через класс


Представляю вам php класс для работы с ini файлами. Он практически повторяет функциональность класса ини из делфи. Данный класс уже встроен в DevelStudio и находится в "engine_sdk/files/ini_ex.php".


if (!defined('_BR_'))
   define('_BR_',chr(13).chr(10));
class TIniFileEx {
    public $filename;
    public $arr;
    function __construct($file = false){
        if ($file)
            $this->loadFromFile($file);
    }
    function initArray(){
        $this->arr = parse_ini_file($this->filename, true);
    }
    function loadFromFile($file){
        $result = true;
        $this->filename = $file;
        if (file_exists($file) && is_readable($file)){
            $this->initArray();
        }
        else
            $result = false;
        return $result;
    }
    function read($section, $key, $def = ''){
        if (isset($this->arr[$section][$key])){
            return $this->arr[$section][$key];
        } else
            return $def;
    }
    function write($section, $key, $value){
        if (is_bool($value))
            $value = $value ? 1 : 0;
        $this->arr[$section][$key] = $value;
    }
    function eraseSection($section){
        if (isset($this->arr[$section]))
            unset($this->arr[$section]);
    }
    function deleteKey($section, $key){
        if (isset($this->arr[$section][$key]))
            unset($this->arr[$section][$key]);
    }
    function readSections(&$array){
        $array = array_keys($this->arr);
        return $array;
    }
    function readKeys($section, &$array){
        if (isset($this->arr[$section])){
            $array = array_keys($this->arr[$section]);
            return $array;
        }
        return array();
    }
    function updateFile(){
        $result = '';
        foreach ($this->arr as $sname=>$section){
            $result .= '[' . $sname . ']' . _BR_;
            foreach ($section as $key=>$value){
                $result .= $key .'='.$value . _BR_;
            }
            $result .= _BR_;
        }
            file_p_contents($this->filename, $result);
            return true;
    }
    function __destruct(){
        $this->updateFile();
    }
}

Чем он удобен? Его легко использовать для чтения и записи ini файлов.

Запись информации в ini файл


Рассмотрим пример на основе нашего php класса.


$ini = new TIniFileEx('config.ini'); // создаем объект
$ini->write('main','key1','100'); // пишем в секцию main
$ini->write('main','key2','200');
$ini->updateFile(); // скидываем информацию в ini файл

В итоге у нас должен получиться вот такой файл:


[main]
key1=100
key2=200

При создании объекта путь можно указывать к несуществующему файлу, он его создаст автоматически.

Удобное чтение из ini файла


А теперь рассмотрим код чтения, он будет работать даже тогда, когда ини файла и нет физически, вот в чем красота работы с ини файлами:


$ini = new TIniFileEx('config.ini');
$key1 = $ini->read('main','key1','100');
// 3 параметр это значение по-умолчанию,
//если значения в ини файле нет или файла самого нет,
// будет присвоено значение по-умолчанию
$key2 = $ini->read('main','key2','200');

Здесь мы читаем значения из ини файла. Значения могут быть любыми - строки, числа. Массивы и объекты записывать и читать естественно нельзя. Для этого используйте известные функции serialize и unserialize.

В ini файле можно оставлять комментарии, они будут игнорироваться и не учитываться. Комментарий в ini начинается с новой строки и с символа ";" - точка с запятой. Пример:


[main]
; описание ключа
key=value

Ограничение на размер ini файла у пхп и класса никакого нет.


вернутся к списку