parse_ini_string

(PHP 5 >= 5.3.0)

parse_ini_stringParse a configuration string

Description

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

parse_ini_string() returns the settings in string ini in an associative array.

The structure of the ini string is the same as the php.ini's.

Parameters

ini

The contents of the ini file being parsed.

process_sections

By setting the process_sections parameter to TRUE, you get a multidimensional array, with the section names and settings included. The default for process_sections is FALSE

scanner_mode

Can either be INI_SCANNER_NORMAL (default) or INI_SCANNER_RAW. If INI_SCANNER_RAW is supplied, then option values will not be parsed.

Return Values

The settings are returned as an associative array on success, and FALSE on failure.

Notes

Note: There are reserved words which must not be used as keys for ini files. These include: null, yes, no, true, false, on, off, none. Values null, off, no and false result in "". Values on, yes and true result in "1". Characters ?{}|&~![()^" must not be used anywhere in the key and have a special meaning in the value.

See Also

Коментарии

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

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