Verimli config.php dahil etmek nasıl?

5 Cevap

Ben her zaman daha verimli yollar ve yeni şeyler öğrenme ilgileniyorum. Şu anda, ben her dosyasındaki kodu <?php include('config.php'); ?> kullanıyorum. Dosya benim klasör yapısında olduğu yere bağlı olarak, ben <?php include('../config.php'); ?> ya da <?php include('../../config.php'); ?> olurdu. Nasıl daha verimli hale getirebilir? Sadece kök o benim config.php var ve kök şeyi config.php gerektiren yapmak için bir yolu var mı?

5 Cevap

otomatik olarak (auto_prepend_file ini ayar) bir dosya eklemek için bir yol var, ancak yapabileceğiniz en büyük gelişme birden php dosyaların kullanımını terk ve tamamı için tek bir giriş noktası olarak index.php kullanmak için web sitesi.

vb sayfalar "sorular", "etiketleri", "kullanıcılar", bir SO klon ;) yazmak herhalde her sayfada bazı genel php şeyler (db, oturum) + ortak html elemanları (başlık, altbilgi) gerekir. Popüler bir yaklaşım bunların her biri ortak şeyler içerir (questions.php, tags.php, users.php) php dosyalarını bir grup var olmaktır. Örneğin, users.php sonra bu gibi görünecektir

include 'db.php';
include 'session.php';
include 'html.header.php';
.....users-specific stuff 
include 'html.footer.php';

Bu (sitedeki tüm sayfalara bir kenar çubuğu ekleyerek düşünüyorum) oldukça sıkıcı (kod çok tekrarlamak zorunda) ve esnek olduğunu. Benim önerim, sayfaya özgü bir kod içeren bir "ortak malzeme" dosyasına sahip olduğunu "tersyüz" içeren yapmaktır:

 # index.php
 db functions
 session functions
 html header

 $page = isset($_GET['page']) 
   ? preg_replace("/\W+/", "", $_GET['page'])
   : "home";
 include "$page.php";

 html footer

Böylece web sitesinde tek bir giriş noktası olacak - bu daha esnek ve hata ayıklama için daha iyidir. Tek dezavantajı adresler az "güzel" (index.php? Page = kullanıcı vs User.php) olmasıdır, ama bu kolayca mod_rewrite ile çözülebilir

config.php sizin php include path ve o zaman sadece bunu yapabilirsiniz içeren yolunu koyun:

include 'config.php';

ya da daha iyisi:

require_once 'config.php';

Bunun yerine bir dosya nedense (örn. bulunamadı, izinleri hata, vb dosya) dahil edilemez bir uyarı bir hata tetikler çünkü require include tercih edilir. _once eki emin aynı dosya gereksiz yere birden çok kez dahil değildir yapmak için iyi bir ektir.

Ayrıca, sizin include çağrısı 'config.php' etrafında parantez gerekmez unutmayın. include php bir fonksiyonu değildir. Bu bir dil yapısı var. Parantez değil sadece bu örnekte farklı gruplama bir gereksiz olarak hizmet: $myVar = (2 + 2);.

Bir taban dir sabiti yapabilirsiniz

define('BASE_DIR', realpath(__FILE__));

Lütfen index.php koy

Sonra yapabilirsiniz

include BASE_DIR . 'config.php';

Kombine edilebilir farklı seçenekler:

  • Kaynak kontrol izlenmeyecek bir kaynak dosyasına yol tanımlarını yapmak. örneğin ('LIB_PATH', '/ home / tchalvak / proje /') tanımlamak;

  • Bir autoprepend dosyasını belirtin ve php.ini o kurdu. örneğin Eğer eklemek veya anında çıkarma scriptler küresel, kullanılan-her yerde listesi, dahil.

  • Son olarak, ben buldum ya geldi yol-string-manipülasyon hile biraz, hangi unutmak:

    require_once(substr(__FILE__, 0, (strpos(__FILE__, 'lib/')))."resources.php"); // require a file in a specific relationship to another known file, regardless of the actual path involved, and without dealing with any defines.

İşte benim gereklidir (dahil) dosyalarını yönetme hakkında gitmek nasıl:

Ne zaman I can, benim gerekli dosyaları (mutlak yolunu tanımlamak için) sabitleri veya değişkenleri asla kullanmayın. Bu bazı avantajları vardır bulabilirsiniz:

  1. Ben dağıtmak web sitesinin her sürümü için sürekli değiştirmek zorunda değilsiniz.
  2. PHPLint gibi Statik analiz araçları kapanım bu tür çalışmaz.
  3. Benim editör (Eclipse) Bana gerekli dosya üzerinde kontrol + tıklama ile gerekli dosyaya gezinmenizi sağlar.
  4. Bu (gerekli yolları düzenlemek zorunda kalmadan) projeler arasında dosya paylaşmak için kolay
  5. ...

Ama ... Bunu yapmak için, tüm gerektirir ve göreli olması gerekir içerir. Varsayılan PHP kurmak denilen script geçerli dizini kullanır tarafından bu yolu dahil bulunuyor. Denilen komut aynı klasörde bulunması gerekmez, bu sorunlara neden olabilir. Yani tek bir komut dosyası geçen tüm istekleri olan öneri otomatik olarak herhangi bir tür sorunları ortadan kaldırır.