PHP 5.4.45 Released

parse_ini_string

(PHP 5 >= 5.3.0, PHP 7)

parse_ini_stringParse a configuration string

Descrição

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.

Parâmetros

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.

A partir do PHP 5.6.1 também pode ser especificado INI_SCANNER_TYPED. Nesse modo os tipos boolean, null e inteiro são preservados quando possível. Valores string "true", "on" e "yes" são convertidos para TRUE. "false", "off", "no" e "none" são considerados FALSE. "null" é convertido para NULL no modo tipado. Além disso todas as strings numéricas são convertidas para inteiros, se possível.

Valor Retornado

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

Notas

Nota: 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 "", and values on, yes and true result in "1", unless INI_SCANNER_TYPED mode is used. Characters ?{}|&~![()^" must not be used anywhere in the key and have a special meaning in the value.

Veja Também

add a note add a note

User Contributed Notes 2 notes

up
14
epicmaxim at gmail dot com
2 years ago
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($line, 1, $endIdx-1);
            continue;
        }

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

       
$tmp = explode("=", $line, 2);

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

            if(
preg_match("/^\".*\"$/", $value) || preg_match("/^'.*'$/", $value)) {
               
$value = mb_substr($value, 1, mb_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
        )

    )

)
up
-1
Peter Baylies
1 year ago
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_new( fopen('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 );
    }
}
?>
To Top