PHP.mk документација

parse_ini_string

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.parse-ini-string.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.parse-ini-string.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
parse_ini_string

Референца за `function.parse-ini-string.php` со подобрена типографија и навигација.

function.parse-ini-string.php

parse_ini_string

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

parse_ini_stringПарсира конфигурациска низа

= NULL

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

parse_ini_string() ги враќа поставките во низа ini_string во асоцијативно поле.

Структурата на ini низата е иста како и php.ini'.

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

Оваа функција не смее да се користи со недоверливи влезови, освен scanner_mode is INI_SCANNER_RAW бидејќи парсираниот излез може да ги содржи вредностите на чувствителни константи, како што се константи што држат лозинка за базата на податоци.

Параметри

ini_string

Содржината на ini датотеката што се парсира.

process_sections

Со поставување на process_sections , како true, добивате повеќедимензионално поле, со вклучени имиња на секции и поставки. Стандардно за process_sections is false

scanner_mode

Може да биде INI_SCANNER_NORMAL (стандардно) или INI_SCANNER_RAW. Ако INI_SCANNER_RAW се снабдува, тогаш вредностите на опциите нема да се парсираат.

Од PHP 5.6.1 може да се специфицира и како INI_SCANNER_TYPED'. Во овој режим, булови, null и целобројни типови се зачувуваат кога е можно. Низи вредности "true", "on" and "yes" се претвораат во true. "false", "off", "no" and "none" се сметаат false. "null" се конвертира во null во типизиран режим. Исто така, сите нумерички низи се претвораат во целоброен тип ако е можно.

Вратени вредности

Поставките се враќаат како асоцијативни array на успех, и false при неуспех.

Белешки

Забелешка: Постојат резервирани зборови кои не смеат да се користат како клучеви за ini датотеки. Тие вклучуваат: null, yes, no, true, false, on, off, none. Вредности null, off, no and false резултираат во "", и вредности on, yes and true резултираат во "1", освен ако INI_SCANNER_TYPED се користи режимот. Знаци ?{}|&~![()^" не смеат да се користат никаде во клучот и имаат посебно значење во вредноста.

Види Исто така

  • parse_ini_file() - Парсирај конфигурациска датотека

Белешки од корисници 4 белешки

epicmaxim на gmail точка com
12 години пред
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
        )

    )

)
Петер Бејлис
12 години пред
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 );
    }
}
?>
msegit пост пл
пред 7 години
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',
  ),
)
*/
narainsbrain на yahoo точка com
пред 2 години
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($ini, false, INI_SCANNER_NORMAL), parse_ini_string($ini, false, INI_SCANNER_TYPED));
$ini = <<<'INI'
a = OK
b = KO
c = NIL
d = PHP_INT_MAX
INI;
var_dump(parse_ini_string($ini, false, INI_SCANNER_NORMAL), parse_ini_string($ini, false, INI_SCANNER_TYPED));
?>

I thought it was worth mentioning.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.