Tek bir yerde birden fazla site dosyaları birleştirmek

1 Cevap php

Biz özel bir PHP / MySQL CMS aynı sunucu üzerinde birden fazla siteleri (20 +) dışarı haddelenmiş Linux / Apache thats çalışan var. Her site özelleştirilmiş olan her site için bir kaç dosyaları ile tam olarak aynı CMS dosyalarını kullanır.

Her site için özel dosyalar şunlardır:

/library/mysql_connect.php
/public_html/css/*
/public_html/ftparea/*
/public_html/images/*

Her site için benzersiz olan /public_html/includes/ içindeki diğer rasgele dosyaların bir çift de var. Sunucuda bu her sitenin dışında aynı dosyaları kullanır. Içinde otururken Her site /home/username/. Çoğaltma büyük bir miktar biz her kullanıcı hesabı güncellemek için gereken bir sistem güncelleştirmesini dağıtmak istediğiniz her zaman burada olduğu açıktır. Ortak site dosyaları hepimiz sadece SVN taahhüt ve oradan doğrudan tek bir yere dağıtmak mümkün olsaydı çok daha mantıklı olur SVN'de saklanır önüne alındığında. Ne yazık ki, bu aşamada önemli bir mimari değişiklik yapmadan sorunlu olabilir. Aklımda ideal bir senaryo /home/commonfiles/ ve bir hesap belirli dosya olmadıkça bu ortak dosyaları kullanarak her site gibi bir hesap oluşturma anlamına gelir, örneğin, bir istek /home/user/public_html/index.php yapılır ama bu kadar dosya isteği sonra /home/commonfiles/public_html/index.php yönlendirilir yok. Ben genellikle bu yaklaşım, Zend Framework (ve muhtemelen diğerleri) index.php belirli bir dosyayı eşleşen Yüklü tüm isteklerini yönlendirmek nasıl benzer, mümkün olduğunu biliyoruz. Ben sadece uygulama hakkında ve onun aslında tavsiye edip gitmek nasıl tam olarak emin değilim. Gerçekten herhangi bir giriş / fikirler insanlar var bekleriz.

EDIT AllenJB sözleri, biz daha önce bu potansiyel bir çözüm olarak AliasMatch araştırdı ki, biz böyle bir şey baktım bir kullanıcı için bir general.conf dosyası ile sona erdi hatırlattı:

php_admin_value open_basedir "/home/commonfi:/home/usertes:/usr/lib/php:/usr/local/lib/php:/tmp"
php_admin_value include_path "/home/commonfi"
AliasMatch (.*).php /home/commonfi/public_html/$1.php
AliasMatch (.*).html /home/commonfi/public_html/$1.html

1 Cevap

Eğer (o yoksa küresel dosyasını yüklemek, yerel dosya yüklemek) açıklamak gibi kesinlikle bir "basamaklı" sistemi inşa edebilirsiniz. Karmaşıklığı dosyaları (PHP () dahil, web üzerinden, ... hatta belki de daha fazla yolu? Kullanarak) farklı şekillerde yüklü olduğunu

Filesystem includes

includes/ bir PHP sınıfı, her içeren dosyalardan oluşuyorsa Zend Framework yaptığı gibi, bir autoloader kullanabilirsiniz. Autoloader içeren dosyanın bir özel sürümü için ilk bakmak ve birini bulamazsa, bunun yerine genel sürümü içerir. Ben sizinle başlamak için kod ihtiyacınız varsa böyle bir autoloader kullanışlı olması için olur.

Tek sınıf başına dosya yapısına uymuyor içeriyorsa, başarısız bir özel dosya veya yerel sürümünü getirir include() function, inşa etmek olurdu küresel biri, o.

Pseudo-kod:

function fetch_path($name)
 { 
 if (file_exists(LOCAL_DIRECTORY."/$name")) return LOCAL_DIRECTORY."/$name";
 if (file_exists(GLOBAL_DIRECTORY."/$name")) return GLOBAL_DIRECTORY."/$name";
 return false;
}

Web resources

İkinci bölüm web bölümü (lokal veya global dosyaları ile yani Web URL'ler) olacak. I-think Bu .htaccess dosyasında -f anahtarını kullanarak oldukça kolay çözülebilir olmalıdır. Sen failed istekleri (!-f) yerel web kaynakları dizinine (example.com/css/main_stylesheet.css), küresel birine /home/commonfiles/public_html/main_stylesheet.css yeniden yazan bir kural kuracağına .) Sen CommonFıles yerel isteklerini yeniden muktedir Apache'nin sunucu geneli ile uğraşmak gerekir, ama bu mümkün olmalıdır.

Bu ayrı bir soru belki de değer.