Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Работа с INI файлами

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Написана была когда то для себя
vitaliy_mad
Отправлено: 07 Ноября, 2010 - 23:45:53
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




Расчитана на линуксовскую кодировку, т.е. \n

array readIniFile(string filename)
Считывает INI файл в массив следующей структуры:
CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [Section1] => Array
  3.         (
  4.             [Field11] => Value11
  5.             [Field12] => Value12
  6.             [Field13] => Value13
  7.         )
  8.     [Section2] => Array
  9.         (
  10.             [Field21] => Value21
  11.             [Field22] => Value22
  12.             [Field23] => Value23
  13.         )
  14.     [Section3] => Array
  15.         (
  16.             [Field31] => Value31
  17.             [Field32] => Value32
  18.             [Field33] => Value33
  19.         )
  20. )
  21.  

string readIniData(string filename, string section, string field)
Считывает значение параметра field секции section. результат в виде строки

array readIniSection( string filename, string section)
Считывает секцию section и возвращает массив формата:
CODE (htmlphp):
скопировать код в буфер обмена
  1. {
  2.             [Field1] => Value1
  3.             [Field2] => Value2
  4. )
  5.  

bool writeIniFile(string filename, array arr)
Записывает форматированный массив в ini файл filename
Структура arr:
CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [Section1] => Array
  3.         (
  4.             [Field11] => Value11
  5.             [Field12] => Value12
  6.             [Field13] => Value13
  7.         )
  8.     [Section2] => Array
  9.         (
  10.             [Field21] => Value21
  11.             [Field22] => Value22
  12.             [Field23] => Value23
  13.         )
  14.     [Section3] => Array
  15.         (
  16.             [Field31] => Value31
  17.             [Field32] => Value32
  18.             [Field33] => Value33
  19.         )
  20. )
  21.  
В случае успеха возвращает true. При ошибке false

bool writeIniData( string filename, string section, string field, string value)
Добавляет или редактирует параметр field в значение value секции section. Если секции или параметра не существует, они будут созданы

PHP:
скопировать код в буфер обмена
  1. function readIniFile($filename) {
  2.     if (!file_exists($filename)) die('File '.$filename.' not found');
  3.     if (!is_readable($filename)) die('File read error. Check the access');
  4.     $str=file_get_contents($filename);
  5.     $arr=explode("\n",$str);
  6.     unset($lastsection);
  7.     foreach($arr as $s) {
  8.         $s=preg_replace('/^\s+/','',$s);
  9.         $s=preg_replace('/\s+$/','',$s);
  10.         if (empty($s)) continue;
  11.         if (preg_match('/\[(.+)\]/',$s,$m)) {
  12.             $sec=strtolower($m[1]);
  13.             $res[$sec]=array();
  14.             $lastsection=$sec;
  15.        
  16.         }
  17.         else {
  18.             if (!isset($lastsection)) die('Error fromat of ini file');
  19.             list($f,$v)=split('=',$s);
  20.             $res[$lastsection][strtolower($f)]=$v;
  21.         }
  22.     }
  23.     return $res;
  24. }
  25.  
  26. function readIniData($filename,$section,$field) {
  27.     $arr=readIniFile($filename);
  28.     $section=strtolower($section);
  29.     $field=strtolower($field);
  30.     if (!isset($arr[$section][$field])) return false;
  31.     return $arr[$section][$field];
  32. }
  33.  
  34. function readIniSection($filename,$section) {
  35.     $arr=readIniFile($filename);
  36.     $section=strtolower($section);
  37.     if (!isset($arr[$section])) return false;
  38.     return $arr[$section];
  39. }
  40.  
  41. function writeIniFile($filename,$arr) {
  42.     if (count($arr)===0) return false;
  43.     $f = fopen($filename, "w");
  44.     if ($f===false) return false;
  45.     foreach($arr as $key=>$sec) {
  46.         fwrite($f,"[$key]\n");
  47.         foreach($sec as $field=>$val) {
  48.             fwrite($f,"$field=$val\n");
  49.         }
  50.         fwrite($f,"\n");
  51.     }
  52.     fclose($f);
  53.     return true;
  54. }
  55.  
  56. function writeIniData($filename,$section,$field,$value) {
  57.     if (empty($section) or empty($field) or empty($value))
  58.         return false;
  59.     $arr=readIniFile($filename);
  60.     $arr[strtolower($section)][strtolower($field)]=$value;
  61.     if (!writeIniFile($filename,$arr)) return false;
  62.     return true;
  63. }
  64.  

Скачать файл: inifile.php.gz
Скачан раз: 265

(Отредактировано автором: 07 Ноября, 2010 - 23:47:33)

 
 Top
Ch_chov
Отправлено: 08 Ноября, 2010 - 05:35:50
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Для простого чтения ini файла удобно пользовать parse_ini_file и parse_ini_string.
 
 Top
SAD
Отправлено: 08 Ноября, 2010 - 07:10:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




vitaliy_mad, вы уже не первый кто изобрел этот велосипед заново)
 
 Top
vitaliy_mad
Отправлено: 08 Ноября, 2010 - 09:12:47
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




SAD, знаю. Радость просто когда понадобилось біло лень искать готовое, оказалось проще написать...

Ch_chov parse_ini_file не учитывает секции.

(Отредактировано автором: 08 Ноября, 2010 - 09:13:00)

 
 Top
Uchkuma
Отправлено: 08 Ноября, 2010 - 09:32:15
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




vitaliy_mad пишет:
Ch_chov parse_ini_file не учитывает секции.
Читайте внимательнее доки parse_ini_file:
Цитата:
Установив последний аргумент process_sections в TRUE, вы получаете многомерный массив, который включает как название отдельных настроек, так и секции.
 
 Top
Мелкий Супермодератор
Отправлено: 08 Ноября, 2010 - 09:34:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




vitaliy_mad пишет:
parse_ini_file не учитывает секции.

А описание прочитать? Подмигивание Второй параметр true возвратит структуру в точности, как разбираете вы сами.


-----
PostgreSQL DBA
 
 Top
vitaliy_mad
Отправлено: 08 Ноября, 2010 - 12:21:43
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




хм... это упустил из виду... Не понял
может и про запись с редактированием я где то упустил?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB