parse_ini_string

(PHP 5 >= 5.3.0)

parse_ini_stringРазбирает строку конфигурации

Описание

array parse_ini_string ( string $ini [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL ]] )

parse_ini_string() возвращает настройки из строки ini в виде ассоциативного массива.

Структура INI строки такая же, как и в php.ini.

Список параметров

ini

Содержимое разбираемого INI файла.

process_sections

Установив в параметр process_sections TRUE, можно получить многомерный массив, который включает названия секций и настроек. По умолчанию process_sections равен FALSE

scanner_mode

Может принимать следующие значения: INI_SCANNER_NORMAL (по умолчанию) или INI_SCANNER_RAW. Если указано значение INI_SCANNER_RAW, то значения опций не будут обрабатываться.

Возвращаемые значения

В случае успеха, настройки возвращаются в виде ассоциативного массива (array). В случае ошибки, возвращается FALSE.

Примечания

Замечание: Существуют зарезервированные слова, которые нельзя использовать в качестве ключей в ini-файлах. Такими словами являются: null, yes, no, true, false, on, off, none. Значения null, no и false преобразуются в "", yes и true преобразуются в "1". Символы ?{}|&~![()^" не должны использоваться в ключах и иметь какой-либо особый смысл в значениях.

Смотрите также

  • parse_ini_file() - Обрабатывает конфигурационный файл

Коментарии

parse_ini_string_m is analog for a parse_ini_string function.

had to code this function due to the lack of a php 5.3 on some hosting.

parse_ini_string_m:
- ignores commented lines that start with ";" or "#"
- ignores broken lines that do not have "="
- supports array values and array value keys

<?php
function parse_ini_string_m($str) {
   
    if(empty(
$str)) return false;

   
$lines explode("\n"$str);
   
$ret = Array();
   
$inside_section false;

    foreach(
$lines as $line) {
       
       
$line trim($line);

        if(!
$line || $line[0] == "#" || $line[0] == ";") continue;
       
        if(
$line[0] == "[" &amp;&amp$endIdx strpos($line"]")){
           
$inside_section substr($line1$endIdx-1);
            continue;
        }

        if(!
strpos($line'=')) continue;

       
$tmp explode("="$line2);

        if(
$inside_section) {
           
           
$key rtrim($tmp[0]);
           
$value ltrim($tmp[1]);

            if(
preg_match("/^\".*\"$/"$value) || preg_match("/^'.*'$/"$value)) {
               
$value mb_substr($value1mb_strlen($value) - 2);
            }

           
$t preg_match("^\[(.*?)\]^"$key$matches);
            if(!empty(
$matches) &amp;&amp; isset($matches[0])) {

               
$arr_name preg_replace('#\[(.*?)\]#is'''$key);

                if(!isset(
$ret[$inside_section][$arr_name]) || !is_array($ret[$inside_section][$arr_name])) {
                   
$ret[$inside_section][$arr_name] = array();
                }

                if(isset(
$matches[1]) &amp;&amp; !empty($matches[1])) {
                   
$ret[$inside_section][$arr_name][$matches[1]] = $value;
                } else {
                   
$ret[$inside_section][$arr_name][] = $value;
                }

            } else {
               
$ret[$inside_section][trim($tmp[0])] = $value;
            }           

        } else {
           
           
$ret[trim($tmp[0])] = ltrim($tmp[1]);

        }
    }
    return 
$ret;
}
?>

example usage:

<?php
$ini 
'

    [simple]
    val_one = "some value"
    val_two = 567

    [array]
    val_arr[] = "arr_elem_one"
    val_arr[] = "arr_elem_two"
    val_arr[] = "arr_elem_three"

    [array_keys]
    val_arr_two[6] = "key_6"
    val_arr_two[some_key] = "some_key_value"

'
;

$arr parse_ini_string_m($ini);
?>

variable $arr output:

Array
(
    [simple] => Array
    (
        [val_one] => some value
        [val_two] => 567
    )

    [array] => Array
    (
        [val_arr] => Array
        (
            [0] => arr_elem_one
            [1] => arr_elem_two
            [2] => arr_elem_three
        )
    )

    [array_keys] => Array
    (
        [val_arr_two] => Array
        (
            [6] => key_6
            [some_key] => some_key_value
        )

    )

)
2013-04-04 10:51:56
http://php5.kiev.ua/manual/ru/function.parse-ini-string.html
Автор:
Replacement for php_ini_string() for PHP pre 5.3 - uses php_ini_file() and streams

<?php
if ( !function_exists'parse_ini_string' ) ) {
    function 
parse_ini_string$string$process_sections ) {
        if ( !
class_exists'parse_ini_filter' ) ) {
           
/* Define our filter class */
           
class parse_ini_filter extends php_user_filter {
                static 
$buf '';
                function 
filter$in$out, &$consumed$closing ) {
                   
$bucket stream_bucket_newfopen('php://memory''wb'), self::$buf );
                   
stream_bucket_append$out$bucket );
                    return 
PSFS_PASS_ON;
                }
            }
           
/* Register our filter with PHP */
           
stream_filter_register("parse_ini""parse_ini_filter")
            or return 
false;
        }
       
parse_ini_filter::$buf $string;
        return 
parse_ini_file"php://filter/read=parse_ini/resource=php://memory"$process_sections );
    }
}
?>
2013-10-31 21:34:18
http://php5.kiev.ua/manual/ru/function.parse-ini-string.html
Автор:
With function parse_ini_stringM() below you can:
- fix unvalued fields ('key' (invalid) ==> 'key=' (OK) )
- fix unquotted values with equal sign '=' ('key=value_part1=value_part2' ==> 'key="value_part1=value_part2"')
- fix (solve) multidimensional arrays (makes 'key[key1][key2]=value' valid)

function parse_ini_stringM() on github https://gist.github.com/msegu/c43a871c5a874a1d9bff978b448a0aa4 (here is too long)

// Example:

$ini = '[a]
b
c=d
e=';

var_export(parse_ini_string($ini, TRUE)); /* array (
  'a' => 
  array (
    'c' => 'd',
    'e' => '',
  ),
)
*/

$ini .= '
f[g][2]=h
f[g][i]=j
f[g][][]=k
m=n=o';

var_export(parse_ini_string($ini, TRUE)); // false

var_export(parse_ini_stringM($ini, TRUE)); /* array (
  'a' => 
  array (
    'b' => '',
    'c' => 'd',
    'e' => '',
    'f' => 
    array (
      'g' => 
      array (
        2 => 'h',
        'i' => 'j',
        3 => 
        array (
          0 => 'k',
        ),
      ),
    ),
    'm' => 'n=o',
  ),
)
*/
2018-06-27 22:43:50
http://php5.kiev.ua/manual/ru/function.parse-ini-string.html
Автор:
Hi,
Up to PHP 8.3 (at least), it seems that INI_SCANNER_TYPED is ignored when trying to get values from constants.
For example :
<?php
// https://3v4l.org/qK5o8

const OK true;
const 
KO false;
const 
NIL null;

$ini = <<<'INI'
a = TRUE
b = FALSE
c = null
d = 9223372036854775807
INI;
var_dump(parse_ini_string($inifalseINI_SCANNER_NORMAL), parse_ini_string($inifalseINI_SCANNER_TYPED));
$ini = <<<'INI'
a = OK
b = KO
c = NIL
d = PHP_INT_MAX
INI;
var_dump(parse_ini_string($inifalseINI_SCANNER_NORMAL), parse_ini_string($inifalseINI_SCANNER_TYPED));
?>

I thought it was worth mentioning.
2023-12-29 13:39:04
http://php5.kiev.ua/manual/ru/function.parse-ini-string.html

    Поддержать сайт на родительском проекте КГБ