parse_ini_file

(PHP 4, PHP 5, PHP 7, PHP 8)

parse_ini_fileBir yapılandırma dosyasını çözümler

Açıklama

parse_ini_file(string $dosyaismi, bool $bölümleri_işle = false, int $tarama_kipi = INI_SCANNER_NORMAL): array|false

parse_ini_file() işlevi dosyaismi ile belirtilen yapılandırma dosyasını yükler ve içindeki ayarları bir ilişkisel dizi içinde döndürür.

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

Bağımsız Değişkenler

dosyaismi

Çözümlenecek yapılandırma dosyasının ismi. Göreli bir yol kullanılıyorsa, mevcut çalışma dizinine göre, ardından include_path değerlendirilir.

bölümleri_işle

Bu bağımsız değişkene true atanırsa bölüm isimlerini ve içerdikleri ayarları içeren çok boyutlu bir dizi döner. Bağımsız değişkenin ö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.

PHP 5.6.1 ve sonrasında bu INI_SCANNER_TYPED olarak da belirtilebilir. Bu kipte mantıksal, null ve tamsayı türler mümkün olduğunca korunur. "true", "on" ve "yes" dizge değerleri true değerine dönüştürülür. "false", "off", "no" ve "none" ise false yapılır. "null" dizgesi ise null değerine dönüşür. Ayrıca, tüm sayısal dizgeler mümkün olduğu takdirde tamsayı türe çevrilir.

Dönen Değerler

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

Örnekler

Örnek 1 - misal.ini içeriği

; Bu bir yapılandırma dosyası örneğidir.
; php.ini içinde ';' ile başlayan satırlar açıklamadır.

[ilk_bölüm]
bir = 1
yedi = 7
hayvan = AT

[ikinci_bölüm]
yol = "/usr/local/bin"
URL = "http://localhost/~kullanici"

[üçüncü_bölüm]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"

urls[svn] = "http://svn.php.net"
urls[git] = "http://git.php.net"

Örnek 2 - parse_ini_file() örneği

INI dosyası içinde sabitler de (fakat __FILE__ gibi sihirli sabitler değil) çözümlenebilir, bu bakımdan parse_ini_file() işlevini çalıştırmadan önce bir sabiti bir ini değeri olarak tanımlamışsanız, bu sabit de sonuca dahil edilir. Sadece ini değerleri değerlendirmeye alınır ve değer bir sabit olmalıdır. Örnek:

<?php

define
('AT', 'Doru at');

// Bölümleri çözümlemeyelim
$ini_dizisi = parse_ini_file("misal.ini");
print_r($ini_dizisi);

// Bölümleri de çözümleyelim
$ini_dizisi = parse_ini_file("misal.ini", true);
print_r($ini_dizisi);

?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [bir] => 1
    [yedi] => 7
    [hayvan] => Doru at
    [yol] => /usr/local/bin
    [URL] => http://localhost/~kullanici
    [phpversion] => Array
        (
            [0] => 5.0
            [1] => 5.1
            [2] => 5.2
            [3] => 5.3
        )

    [urls] => Array
        (
            [svn] => http://svn.php.net
            [git] => http://git.php.net
        )

)
Array
(
    [ilk_bölüm] => Array
        (
            [bir] => 1
            [yedi] => 7
            [hayvan] => Doru at
        )

    [ikinci_bölüm] => Array
        (
            [yol] => /usr/local/bin
            [URL] => http://localhost/~kullanici
        )

    [üçüncü_bölüm] => Array
        (
            [phpversion] => Array
                (
                    [0] => 5.0
                    [1] => 5.1
                    [2] => 5.2
                    [3] => 5.3
                )

            [urls] => Array
                (
                    [svn] => http://svn.php.net
                    [git] => http://git.php.net
                )

        )

)

Örnek 3 - Bir php.ini dosyasının parse_ini_file() ile çözümlenmesi

<?php
// Aşağıdaki sonuçları karşılaştırmak için basit bir işlev
function evethayır($ifade)
{
return(
$ifade ? 'Evet' : 'Hayır');
}

// php_ini_loaded_file() ile php.ini dosyasının yolunu öğrenelim.
$ini_yolu = php_ini_loaded_file();

// php.ini dosyasını çözümleyelim
$ini = parse_ini_file($ini_yolu);

// Değerleri karşılaştırıp basalım; get_cfg_var() ile de aynı
// sonuçların alınacağına dikkat ediniz
echo '(çözümlenen) magic_quotes_gpc =' .
evethayır($ini['magic_quotes_gpc']) . PHP_EOL;
echo
'(yüklenen) magic_quotes_gpc = ' .
evethayır(get_cfg_var('magic_quotes_gpc')) . PHP_EOL;
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

(çözümlenen) magic_quotes_gpc = Evet
(yüklenen) magic_quotes_gpc = Evet

Örnek 4 Ara Değerler

Sabitleri değerlendirmeye ek olarak, belirli karakterlerin ini değerlerinde özel anlamları vardır. Buna ek olarak, ortam değişkenleri ve önceden tanımlanmış yapılandırma seçenekleri ${}sözdizimi kullanılarak okunabilir (bkz: get_cfg_var()).

; bitsel VEYA için | kullanılır
three = 2|3

; bitsel VE için & kullanılır
four = 6&5

; bitsel Ayrıcalıklı VEYA için ^ kullanılır
five = 3^6

; bitsel olumsuzlama için ~ kullanılır
negative_two = ~1

; gruplama için () kullanılır
seven = (8|7)&(6|5)

; PATH ortam değişkenini oku
path = ${PATH}

; 'memory_limit' yapılandırma seçeneğini oku
configured_memory_limit = ${memory_limit}

Örnek 5 Öncelleme Karakterleri

Bazı karakterlerin çift tırnaklı dizgelerde özel anlamları olduğundan önlerine tersbölü çizgisi konarak öncelenmeleri gerekir. Hepsinden önce, dizgenin sınırlarını belirleyen çift tırnak " ve tersbölünün \ kendisi (özel karakterlerden birini önceliyorsa) bu özel karakterlerdendir:

tırnaklı = "She said \"Exactly my point\"."
; İçinde tırnak imleri bulunan; bir dize elde edilir.

ipucu = "Çift tırnağı öncelemek için \\\" kullan"
; Sonuç: Çift tırnağı öncelemek için \" kullan

Windows benzeri dosya yollarında bunun bir istisnası vardır: Tırnaklı dizgeyi bir satırsonu izliyorsa sondaki ters bölüyü öncelememek mümkündür:

save_path = "C:\Temp\"

Çok satırlı bir değerde ardından satır sonu gelen bir çift tırnağın öncelenmesi gerekiyorsa, değer birleştirmeyi aşağıdaki şekilde kullanmak mümkündür (bir çift tırnaklı dizenin hemen ardından bir diğeri gelir):

long_text = "Lorem \"ipsum\"""
 dolor" ; Sonuç: Lorem "ipsum"\n dolor

Özel anlamı olan karakterlerden bir diğeri $ dolar imidir. Ardından açan kaşlı ayraç geliyorsa dolar iminin öncelenmesi gerekir:

code = "\${test}"

Karakter önceleme INI_SCANNER_RAW kipinde desteklenmez (bu kipte tüm karakterler "oldukları gibi" işlenir).

İni çözümleyicisinin standart öncelemleri (\n, \t ve benzerlerini) desteklemediğini dikkate almak gerekir. Gerekirse, parse_ini_file() işlevinin sonucunu stripcslashes() işleviyle yeniden işlemden geçirmek gerekebilir.

Notlar

Bilginize:

Bu işlev php.ini dosyasına hiçbir şey yapmaz. Zaten betiğinizi çalıştırdığınız sırada işlem yapılır. Bu işlevi sadece kendi uygulamanızın yapılandırma dosyasını okumak için kullanabilirsiniz.

Bilginize:

INI dosyasındaki bir değer harf ve rakamların haricinde karakterler içeriyorsa bu değeri çift tırnak (") imlerinin arasına almalısınız.

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

Bilginize:

Eşit işareti içermeyen girdiler yoksayılır. Örneğin, "foo" yoksayılırken "bar =" çözümlenir ve boş değer eklenir. Örneğin, MySQL my.cnf içinde bir "no-auto-rehash" girdisine sahiptir ve herhangi bir değer almadığı için yoksayılır.

Bilginize:

ini dosyaları genellikle HTTP sunucuları tarafından düz metin olarak kabul edilir ve bu nedenle istenirse tarayıcılara sunulur. Bu, güvenlik için ini dosyalarınızı belge kök dizininiz dışında tutmanız veya HTTP sunucunuzu onlara hizmet vermeyecek şekilde yeniden yapılandırmanız gerektiği anlamına gelir. Bunlardan herhangi birinin yapılmaması bir güvenlik riski oluşturabilir.

Ayrıca Bakınız