En iyi uygulamalar PHP yapılandırması için XML kullanarak alıyorsunuz?

10 Cevap php

Ben ASP.NET Web.config dosyalarına benzer bir biçimde, sonraki PHP projesi için mağaza yapılandırmasına bir XML belgesini kullanmayı planlıyordu. Sadece iki endişeler:

  1. Tarayıcıya hizmet edilemez.
  2. Barındırma paylaşılan canlı olmalı.

Ben hizmet engellemek için düşünebildiğim en iyi yolu, PHP filetype değiştirmek ve aşağıdaki Yorum eklemek için:

<?xml version="1.0" ?>
<!-- <?php if(!defined('FW_LOADED')){ exit; } ?> -->
<configuration>
....
</configuration>

Bu iyi çalışıyor, ama en iyi çözüm gibi hissetmiyorum.

Bir PHP projesi için yapılandırma depolamak için herkesten kullanılan XML var? (Yerine sabit tanımlı değilse komut çıkar dosyanın başında bir yorum koyarak) bazı iyi alternatif çözümler nelerdir?


Update:

Daha iyi ben arıyorum ne yansıtmak için soru başlığı değiştirdi. Yanıltıcı Özgün soru başlık için özür dilerim. Yapılandırması için XML kullanarak bir not the question. Yapılandırması için XML kullanarak zaman en iyi uygulamalar için soruyorum. Please stop suggesting that I use arrays or INI files...

Ben config dosyası bile olmayan php geliştiriciler için kullanmak mümkün olduğunca kolay olmasını istiyoruz. Bu dil nötr olduğu için XML seçti. Ben zaten yapılandırma (kısmen) ayrıştırmak için SimpleXML kullanıyorum. Ben de derleme veya memcached veya diğer araçlar kullanılarak elde edilebilir, çünkü daha hızlı yapma konusunda endişeli değilim.

En iyi çözüm o kadar uzaktır:

  • Moving it out of web root.
    • Possible, but would like to keep the config as close as possible to the application.
  • Using htaccess to hide the config file.
    • I don't want to risk the chance that someone breaks the .htaccess file, leaving the config file exposed.

Ben bir uygulama yapılandırma ayarları için XML kullanma deneyimi olan birinden duymak istiyorum, ve nasıl hizmet olmaktan config dosyasını engeller.

10 Cevap

Ben dışarıdan erişilen dosyaları önlemek için en iyi yolu, kök web klasörü dışında bunları saklamak için olduğunu düşünüyorum.

Bu genellikle yapılandırma dosyaları için ne olduğunu - aslında, bu genellikle tek bir yapılandırma nesne birden çok yapılandırma dosyalarını birleştiren bu özel sınıfın sarılı, temel kurulum daha fazla olduğunu:

config.php:

return array(
 'config1'=> 'config1value',
 'config2'=> 'config2value',
);

some_page.php:

$config= include('config.php');
if ($config['config1'])
 ...

Yapılandırma, bir PHP dosyası dosyada bir PHP dizisi olarak saklanan, bu nedenle PHP motoru tarafından ayrıştırılır ve tarayıcıya dönmedi. (Siz config dosyalarını / dizinleri, vb hizmet önlemek için mod_rewrite kuralı ayarı, web kök dışında saklayarak daha da yapılandırma dosyalarını koruyabilirsiniz)

XML dosyasında saklanması yapılandırma bilgileri her istek için bir XML dosyası ayrıştırma yükü ekler. Gelişmiş yapılandırma verilerinin veritabanı depolama (tabii ki, veritabanı veritabanı bağlantı bilgileri depolamak olmayacak, bu yüzden hala bazı temel bilgi için bir yapılandırma çözüm gerekir) güzel, ama aynı zamanda maliyetlidir. Bu memcached veya diğer önbellek programları ile olgun önbelleğe yüzden config veri, (nadiren yazılı / her isteği okumak) genellikle çok statik.

Belge kök dışında veya değil eğer onları koymak ya sonra sadece Apache mod_rewrite kullanmak, dışarıdan erişilen onu kısıtlamak olmaz ya. Örneğin:

RewriteEngine On
RewriteRule ^config.xml [R=404,L]

Orada hiçbir sorunları vardır bu yüzden PHP okuma / yazma XML için birden kütüphaneler vardır. Nispeten basit ise (düz) veri yerine INI dosyaları kullanarak düşünün. PHP vardır parse_ini_file() bir dahili fonksiyonu ve. Net bir şey okumak gibi. Ini dosyaları.

Eğer ortak klasör dışında koyabilirsiniz, bu en iyi çözüm olacaktır. Bunun dışında, cletus tarafından belirtilen mod_rewrite iyi bir seçenektir.

Uygulama yapılandırma hakkında düşünmeye zaman onu yönetmek için gidiyor kim cevap bir soru var. Bu geliştirici olarak sizin tarafından yönetilen olacak ve bazı üçüncü parti en iyi yolu sonunda her zaman nesne ya da dizinin bazı tür herhangi bir format dönüştürme sona beri PHP dizilerde onları tutmak dahil olması beklenen değilse. Eğer baskı sürece beri korunan bu şekilde PHP olarak ayrıştırılır ve çıktıda görüldüğü olmayacaktır.

PHP şimdi XML verilerini işlemek uygun SimpleXML http://php.net/manual/en/book.simplexml.php lib vardır. Ben XML kadar ayrıntılı değil çünkü yapılandırma dili olarak YAML http://www.yaml.org/ tercih ve {gibi birden fazla geliştirme ortamları olduğunda genellikle gereken hiyerarşik yapılandırma dosyaları beste güzel araçlara sahip olurdu, olsa da [(2)] }, test, live. YAML dosyaları ile çalışmak için de çeşitli PHP kütüphaneleri vardır.

Yapılandırmaları her talebe dahildir beri mamcache, apc veya her istek üzerine diskten okumak için değil için benzer gibi bellekte her nasılsa bunları önbelleğe olabilir.

PHP yorumlayıcısı tarafından ayrıştırılır değil dosyaya erişimi koruma ile ilgili. Xml veya. Yml başkalarının hizmet klasörün dışına tutmak, ya da yeniden yazma kuralları kullanabilirsiniz önerildiği gibi.

Ben hizmet olmaktan config dosyasını engellemek şekilde alternatifler arıyordu bir XML yapılandırma çözüm için alternatifler arıyor değildi. Ben daha iyi benim soru phrased gerekirdi.

En iyi çözümleri şimdiye kadar web kök veya kullanım kullanım htaccess üzerinden dosya taşımak için vardır. Ben zaten buraya göndermeden önce bu ya yapmamaya karar verdim, ben bu kadar iyi sözü olmalıdır.

Kimse bu yüzden ben şimdi, bunu yapmaya devam edecek sanırım XML dosyasının en üstünde bir exit deyimini kullanarak hakkında kötü bir şey söyledi.

Config pachage bakabilirsiniz.

XML yapılandırmaları yavaş. PHP bunları derlemek gerekir, diye düşünüyorum. Ya da işi basitleştirmek için PEAR_Config kullanın. Tarayıcı erişimi engelleyerek gibi ... birlikte basit, Apache yönergesi yapacağız "Sipariş izin, tüm inkar inkar". Apache belgeler kontrol edin.

Sen bilgisayarın dosya sistemine giriş olmadan erişmek mümkün olacak bu durumda, web kök dışında xml dosyasını saklayabilirsiniz veya config dizinine erişimi engellemek için. Htaccess (veya IIS eşdeğeri) kullanabilirsiniz.

Paylaşılan barındırma Bu senaryoların ikisi de izin vermelidir.

I would suggest using normal arrays for configurations. Have a file with:

$conf['item1'] = 'value';
$conf['item2'] = 'value2';

vb.

Ve ardından bir dosya tüm bu $ conf öğeler tanımlanan dosya arama ve yolları veya sunucu url veya bir şey eklemek ve var_export kullanarak bir dosyaya tüm bu verileri kaydetmek var.

Sonunda size kolayca arayabileceğiniz bir 'derlenmiş' dosyası olacak.

Not: var_export sadece dizinin içeriğini alır, değil mi adı ne de sonu ';'