Nasıl bir PHP kullanmak için göreceli yolları ile birden fazla dizin / alt dizinleri karşısında içerir

4 Cevap php

Ben oluşturmak için çalışılıyor bir cms sistemi yolları ile zorluk yaşıyorum, ben temelde benim header.php ve içine footer.php dosyaları içeren bir klasör var.

Bu index.php ve çalışma cezası dahil edilmiştir. Ben kullanmaya çalıştığınızda ama sonra aynı göreli yol şimdi yanlış olduğundan benim yönetici alt dizin içinde, görüntüleri ve CSS açıkçası, kırık bir dosya içerir.

Yani benim soru, bunu nasıl aşabiliriz mi?

Burada diğer sorular ve diğer çeşitli kaynaklardan bazı okuduktan sonra, ben mutlak yolları ileriye yol olduğunu düşünüyorum, ama ben her zaman göreli yolları kullandım, bu yüzden mutlak bir yol belirtmek için yapılandırma dosyalarını kullanarak çeşitli kavramları kafamı karıştırıyor.

Ben genellikle kendim için bir şeyler çalışmak için yönetmek, ama uzun bir gün oldu ve ben şaşkına oluyor!

4 Cevap

benim uygulama kök config adında bir dosya var usualy ve ona i taban yolu ve birkaç diğerleri için bir sabit tanımlamak:

define('APP_BASE_PATH', dirname(__FILE__));
define('APP_FUNCTIONS_PATH', APP_BASE_PATH . '/functions');

ve benim gibi dosyaları içerir

include (APP_BASE_PATH . 'includes/another_file.php');
include (APP_FUNCTIONS_PATH . '/function_file.php');

Bu şekilde ben ne dizinde benim başvurusu yerleştirebilirsiniz, artı ben çok endişe olmadan etrafında dosyaları taşıyabilirsiniz.

Ayrıca tam yolunu kullanarak daha hızlı içerir yapar

Ben (. Htaccess ya. Conf kullanarak, Apache) ortam değişkenleri ayarlayarak tercih ederim. Bu şekilde özgürce her yerde webroot tüm dosyaları taşıyabilirsiniz ve bu değişkenler erişimine sahip olacaktır.

SetEnv lib /library/folder/
SetEnv public /my/web/root/
SetEnv environ DEVELOPMENT

Ayrıca, size komut tüm yapılandırma dosyası olarak bir sunucu belirli bir dosya içerir ve orada çeşitli değişkenleri ayarlamak için yukarıda. Htaccess parçasında bahsedilen 'çevre' adlı değişkeni kullanabilirsiniz.

require_once getenv('lib')."Configs/Config_".getenv('environ').".php";

Senin özgürlüğün tadını çıkarın!

veya ...

(. $ _SERVER ['DOCUMENT_ROOT'] '/ includes / header.php') içerir;

Onlar sadece içeren dosyanın geçerli dizinde değil, aynı zamanda mevcut çalışma dizini değil bağlıdır çünkü PHP göreli ve mutlak yollar biraz kırılgandır.

Yani iki bölümlü bir çözüm gerekir.

Öncelikle, bir yönlendirici gerekir. Temel olarak, bu, diğer tüm sayfalar için bir tek-nokta-çağrısı olarak hizmet veren bir içerme dosyasıdır. Onun iş gidin ve altyapı kalanını eklemektir. Tüm sayfalar bu yönlendiricisi ve yalnızca bu yönlendirici diyoruz (ama onları zincire olabilir).

Bu yönlendirici şimdi yok

 include_once dirname(__FILE__).'/include/include.php';

Bu, altyapı dosyasını, ya da konumunu içerir ve güncelleştirmek için tek bir dosya değiştirmenize olanak sağlar. dirname() çağrı tüm göreli ve mutlak problemleri çözer ve kendisi için bir sonraki adım akrabası için bakmak oldu. Ve tanım gereği bu sadece bunu değiştirmek değişikliği, bu yüzden her zaman çalışacaktır.

Bir fonksiyonu ile ismiyle içeriği arayabilir ve doğru dosyayı gider ve alır böylece ikinci bölümü özel includer olduğunu. Gider nerede altyapı dizininde bu gömmek olduğunu. Daha sonra siyah bir kutu olur bilmeden ve nerede çalıştığını ya da bilmek gerek kalmadan bu alanda çağrı dışında sayfaları. Sizin için tüm yapmanın tek bir yer var, çünkü bu sayfa fragmanlarını kapsar yolu sabitleri için gereksinimini ortadan kaldırır.