parse_ini_string

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

parse_ini_stringInterpreta uma string de configuração

Descrição

parse_ini_string(string $ini_string, bool $process_sections = false, int $scanner_mode = INI_SCANNER_NORMAL): array|false

parse_ini_string() retorna as configurações da string ini_string em um array associativo.

A estrutura da string INI é a mesma dos php.ini's.

Parâmetros

ini_string

O conteúdo do arquivo ini sendo interpretado.

process_sections

Definindo o último parâmetro process_sections como true, você recupera um array multidimensional com o nome das seções e configurações inclusas. O padrão para process_sections é false

scanner_mode

O parâmetro pode ser INI_SCANNER_NORMAL (default) ou INI_SCANNER_RAW. Se INI_SCANNER_RAW for fornecido, então os valores das opçoes não serão analisados.

A partir do PHP 5.6.1, também pode ser especificado como INI_SCANNER_TYPED. Nesse modo, os tipos boolean, null e integer são preservados quando possível. Os valores string "true", "on" e "yes" são convertidos em 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 o tipo inteiro, se possível.

Valor Retornado

As configurações são retornadas como um array associativo, se sucesso e false caso falhe.

Notas

Nota: Existem algumas palavras reservadas que não podem ser usadas como chaves em arquivos INI. Elas incluem: null, yes, no, true e false, on, off, none. Valores null, off, no e false retornam como "", e valores on, yes e true resultam em "1", a menos que o modo INI_SCANNER_TYPED seja usado. Os caracteres ?{}|&~![()^" não podem ser usados em lugar algum na chave e têm significado especial no valor.

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 4 notes

up
25
epicmaxim at gmail dot com
12 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<?phpfunction 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
3
Peter Baylies
11 years ago
Replacement for php_ini_string() for PHP pre 5.3 - uses php_ini_file() and streams<?phpif ( !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 );    }}?>
up
1
msegit post pl
7 years ago
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]bc=de=';var_export(parse_ini_string($ini, TRUE)); /* array (  'a' =>   array (    'c' => 'd',    'e' => '',  ),)*/$ini .= 'f[g][2]=hf[g][i]=jf[g][][]=km=n=o';var_export(parse_ini_string($ini, TRUE)); // falsevar_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',  ),)*/
up
0
Philo
1 year ago
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/qK5o8const OK = true;const KO = false;const NIL = null;$ini = <<<'INI'a = TRUEb = FALSEc = nulld = 9223372036854775807INI;var_dump(parse_ini_string($ini, false, INI_SCANNER_NORMAL), parse_ini_string($ini, false, INI_SCANNER_TYPED));$ini = <<<'INI'a = OKb = KOc = NILd = PHP_INT_MAXINI;var_dump(parse_ini_string($ini, false, INI_SCANNER_NORMAL), parse_ini_string($ini, false, INI_SCANNER_TYPED));?>I thought it was worth mentioning.
To Top