parse_ini_string

(PHP 5 >= 5.3.0)

parse_ini_stringBir yapılandırma dizgesini çözümler

Açıklama

array parse_ini_string ( string $ini [, bool $bölümleri_işle = false [, int $tarama_kipi = INI_SCANNER_NORMAL ]] )

parse_ini_string() işlevi ini dizgesi içindeki ayarları bir ilişkisel dizi içinde döndürür.

ini dizgesinin yapısı php.ini dosyasının yapısıyla aynı olmalıdır.

Değiştirgeler

ini

Çözümlenecek ini dosyası içeriği.

bölümleri_işle

Bu değiştirgeye TRUE atanırsa bölüm isimlerini ve içerdikleri ayarları içeren çok boyutlu bir dizi döner. Değiştirgenin öntanımlı değeri FALSE'tır.

tarama_kipi

Değeri INI_SCANNER_NORMAL (öntanımlıdır) veya INI_SCANNER_RAW olabilir. Eğer INI_SCANNER_RAW belirtilirse seçenek değerleri çözümlenmez.

Dönen Değerler

Başarısızlık durumunda FALSE aksi takdirde ayarları bir ilişkisel dizi içinde döndürür.

Notlar

Bilginize: INI dosyalarında anahtar olarak kullanılmaması gereken bazı özel sözcükler vardır. null, yes, no, true, false, on, off, none bunlardan bazılarıdır. null, no ve false "" ile sonuçlanırken, yes ve true "1" ile sonuçlanır. {}|&~![()^" karakterleri hiçbir yerde anahtar veya değer olarak kullanılmamalıdır.

Ayrıca Bakınız

add a note add a note

User Contributed Notes 2 notes

up
5
epicmaxim at gmail dot com
1 year 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
11 months 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