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] == "[" && $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) && 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]) && !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
)
)
)
parse_ini_string
(PHP 5 >= 5.3.0)
parse_ini_string — Bir yapılandırma dizgesini çözümler
Açıklama
$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
TRUEatanırsa bölüm isimlerini ve içerdikleri ayarları içeren çok boyutlu bir dizi döner. Değiştirgenin öntanımlı değeriFALSE'tır. -
tarama_kipi -
Değeri
INI_SCANNER_NORMAL(öntanımlıdır) veyaINI_SCANNER_RAWolabilir. EğerINI_SCANNER_RAWbelirtilirse 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. {}|&~