2015-03-05 30 views
5

Şöyle bir config.ini dosyası var:PHP parse_ini_file problemleri

[database] 
username = user1 
password = pass1 
dbname = db1 

Ve PHP bunu ayrıştırmak istiyorum ama hiçbir şans yaşıyorum. Ben çalışıyorum kodudur:

$inifile = parse_ini_file($_SERVER['DOCUMENT_ROOT'] . "/cfi/config.ini", true); 
var_dump($inifile); 

PHP bir içerme bir parçasıdır Ben yapılandırma dosyası bulmak oldu emin olmak için $ _SERVER [ 'DOCUMENT_ROOT'] ekleyerek çalıştı neden bu.

Var_dump öğesinin sonucu her zaman bool (false)'dur.

Neyi yanlış yapıyorum?

DÜZENLEME:

Eklediğim/ve artık kesinlikle yapılandırma dosyasına işaret ediyor. Ama hala bir sonucu olan bool (false)

+3

Dosya açamıyorum. Eksik olabilirsiniz/$ _SERVER ['DOCUMENT_ROOT'] içinde. '/'. "cfi/config.ini" – taliezin

+0

Belge kökü içinde bir yapılandırma dosyasının tutulmasının iyi bir fikir olup olmadığından emin değilim; Dışarıda tutmak daha iyi olurdu. –

+0

@ Ja͢ck değil, ama bunu yaptığı gibi. OP,/home/cfg/config.ini gibi bir www klasörüne mutlak bir yol kullanmalıdır; burada/home/public_html/'web sitesinin köküdür. – Martin

cevap

3

Lee, erişmeye çalıştığınız Belgeniz klasörüne o $_SERVER['Document_Root']; değişkenin kapsamı dışındadır gibi bu çok benziyor root/cfi/config.ini ise - görünecektir gibi: o klasörde bulunan benzeri

/home/accountname/websitefolder/

Kişisel ini dosyası sesler

/home/accountname/root/cfi/

Bu, ona ulaşamayacağınız anlamına gelir. Sen adresi ile doğru olup olmadığını debug:

if(file_exists($_SERVER['DOCUMENT_ROOT'] . "/cfi/config.ini")){ 
print fileperms($_SERVER['DOCUMENT_ROOT'] . "/cfi/config.ini"); 
} 
else { 
die("does not exist at this location"); 
} 

fileperms fonksiyonu olacak geribildirim dosyası doğru yerde bulunuyorsa, okumaya PHP engelliyor olabilir dosya için erişim izinleri.

ini dosya Yapısı: Ayrıca

, Sen ini dosyasını onaylaması gerekir doğru yapıdır, ini dosyası php.ini dosyasında gibi geçerli ini yapı olması gerekir, bkz http://php.net/manual/en/function.parse-ini-file.php

(düzenleme: BoltClock'un düzenlemesinin yararı için, ini dosyasının yapısına ilişkin yukarıdaki ifadeyi tutmak istiyorum, çünkü bu OP sorununun nedeniydi, ancak yine de onu yeniden yazdım.Bazı şeyler yanlış gitti neden

Hata izleme bulmaya hayatidir:

Ek) Teşekkürler - How to log errors and warnings into a file? - SO üzerinde bu yazı itibaren ve Fred-ii- herkes bilge tavsiyesi aşağıdaki ekleyebilir bazı hata geri bildirim için onların dosyanın başına: sırayla

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
ini_set("log_errors", 1); 
ini_set("error_log", "/tmp/php-error.log"); 

Bu bilmek olanlara aşırı bakacağız, ancak yukarıdaki kod yapacaktır:

report all errors 
display these errors to the browser 
log these errors to the log file 
set where the log file lives. 

ve kayıt dosyalarının görüntülenmesi gerekli değildir, ancak her ikisini de insanların kendi yöntemlerini seçebilmesi için ekledim. Tarayıcıya hataları görüntüleme her zaman üretim sunucuları ile devre dışı bırakılmalıdır.

Şimdi, içinde çok sayıda hata bulunan bir günlük dosyanız var, bunun için klasörünüze bakmak üzere (S) FTP programına ihtiyacınız var, yukarıda belirtilen klasör /tmp/ web sitesi etki alanı klasörünüzde değil, bir arkadaşta klasörün yanında, buna erişmek için (S) FTP'ye ihtiyacınız var. Giriş yapın, klasörü bulun ve dosyayı indirin ve indirin. Bir metin editörü ile açın ve size hatalarınızı verecektir. Dosyayı sunucudan silin ve yeni hatalar oluştuğunda yeni bir tane oluşturulur.

+0

Bu daha mantıklı. OP'nin ne söylediğini görelim. * Parmaklar geçti; ;-) –

+0

Teşekkürler Martin, dosyanın doğru alanda olduğundan emin oldum, örneğin verdiğiniz **/home/accountname/websitefolder/** gibi. File_exists denedim ve 1 döndürdü. Yani bu onu bulduğu anlamına mı geliyor? – Lee

+0

tamam Lee, bir sonraki adım - kodunuza hata günlüğü eklediniz mi? Yap. Ardından, bundan sonraki adımda, dosyayı http://php.net/manual/en/function.chmod.php ile 0750 gibi bir şeye ayarlamak için 'chmod()' işlevini kullanın. Bu, dosyayı herkes için okunabilir olmaya zorlar ve zorlar. – Martin

1

Genel sorununuza neden olup olmadığından emin değilim, ancak DOCUMENT_ROOT'un izleyen bir eğik çizgi içermediğini düşünüyorum, bu nedenle önce bir tane eklemeniz gerekecek "cfi".

Sen ile kontrol edebilirsiniz:

echo $_SERVER['DOCUMENT_ROOT'] . "cfi/config.ini"; 
+0

Tüm yorumları temizler. Lütfen, yorumları, cevabın içeriği ile alakalı olan şeylere sınırlayın; her şey için, [meta] var. – Shog9