
Работа с INI-файлами на PHP

Работа с INI-файлами на PHP
Файлы формата INI - это файлы конфигурации, которые используются различными программами и самой операционной системой Windows для хранения своих настроек. Мне этот формат очень нравится из-за своей доступности и легкости в обработке. На Ассемблере я уже сделал с ними все, что хотел, а теперь понадобилось работать с INI-файлами на PHP. В арсенале PHP есть стандартная функция parse_ini_file, но она содержит принципиальные ошибки, ограничена в возможностях и не решает нужных мне задач. Пришлось рисовать класс для полноценной работы с INI-файлами на PHP.
Итак, что умеет мой PHP INI Parser? Корректный доступ ко всем ключам и секциям INI-файла. Получение, добавление и изменение значений ключей и секций. Удаление ключей и секций не делал, так как не требовалось, но при необходимости добавить не проблема. Автоматическая запись или создание INI-файла после любых изменений с сохранением внутренней структуры (комментарии, пустые строки и т.п.). При работе с файлом подразумевается, что его структура соответствует общепринятым правилам (стандартов на формат INI-файла нет).
Пример тестового INI-файла:
############################
# Config file
############################
; Тип авторизации
auth = full
[auth]
; Данные для авторизации
login = supauzar
password = supadupapassa
[main]
; Данные для работы
do=something
try=10
Пример работы с этим файлов при помощи PHP INI Parser:
Code (PHP) : Убрать нумерацию
- // Подключить класс
- include 'class.ini.php';
- // Будем работать с файлом config.ini
- $ini = new ini('config.ini');
- $auth_type = $ini->get('', 'auth');
- if ($auth_type=='full') {
- $login = $ini->get('auth', 'login');
- $password = $ini->get('auth', 'password');
- // Добавить новый ключ в секцию auth
- $ini->set('auth', 'result', 'success');
- //...
- // какие-то действия
- //...
- $try = $ini->get('main', 'try');
- // Увеличить счетчик и сохранить новое значение ключа
- $ini->set('main', 'try', ++$try);
- // Добавить новый ключ в секцию main
- $ini->set('main', 'result', 'ok');
- // Добавить новую секцию и ключ
- $ini->set('new section', 'foo', 'bar');
- }
В приложении скрипт PHP INI Parser, тестовый INI-файл из статьи и небольшой скрипт с примером использования.
Просмотров: 1695 | Комментариев: 5
Метки: PHP
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(18.04.2024 в 11:17):
Ну если дурак придумал, то сказочный долбоеб дальше заголовка статью так и не осилил. И уж точно вряд ли поймет, о чем тут вообще идет речь.
mixmax
(18.04.2024 в 07:12):
дурак придумал велосипед
100 лет есть нативная функция пхп
$INI=parse_ini_file(KM.'mx.ini');
https://www.php.net/manual/ru/...ini-file.php
данный код использует сайт - [spam]
100 лет есть нативная функция пхп
$INI=parse_ini_file(KM.'mx.ini');
https://www.php.net/manual/ru/...ini-file.php
данный код использует сайт - [spam]
Эрнест
(25.02.2023 в 13:47):
Спасибо, не придется изобретать самому!
morgot
(20.09.2022 в 01:57):
Спасибо! Полезная вещь.
Добавить комментарий
Заполните форму для добавления комментария
PHP INI Parser 1.0


Пришлось сразу же добавить классу возможность загрузки всей секции, если не указан ключ (см. ниже).
Данный класс корректно извлекает из ini-файла строку вида:
a:2:{i:0;s:13:"0,1079:1919,0";i:1;s:14:"1919,639:818,0& quot;;}
, которая формируется командой serialize($aObj), даже не нужно делать экранирование символов " и ; .
Команды ниже этого корректно выполнить не могут:
1) ini::open($_file); ini::readKeys($_сategory,$_arrayKey);
- каждый раз раскрывает строку отбрасывая " (при каждом ini::open) и "убивает" её.
2) parse_ini_file - отсекает все что идет поcле символа ; .
В обоих случаях экранирование не помогает.
При необходимости можно добавить параметр управления раскрытием строки, т.е. нужно ли отбрасывать апострофы ' " - одинарные или двоеные кавычки.
//==============================================================
if ($section=='') { ... }
//Если не передается ключ, загружаем секцию полностью и возвращаем как массив
//не оптимально, желательно подготавливать массив в function __construct
else if ($key=='') { //return false;
if (isset($this->ini_struct['sections'][$section])) {
if (count($this->ini_struct['sections'][$section]['data'])>0) {
foreach ($this->ini_struct['sections'][$section]['data'] as $data) {
if ($data['type']=='key') { $_ar[$data['raw']] = $data['value']; };
};
return $_ar;
} } }
else { ... }
//==============================================================