Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF] Osobna baza dla każdej subdomeny + wildcard
misiek08
post 13.06.2010, 17:18:01
Post #1





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

Ostrzeżenie: (10%)
X----


Witam!
Niedawno zacząłem pracę z ZF. Wcześniej pisałem albo w czystym PHP albo na gotowych klasach. To jednak zaczęło nudzić, bo każdy projekt wymagał kilku zmian, a ZF ma tyle klas, że wystarczy tylko odpowiednie ładować.

Teraz mój problem:
Mam system, który do tej pory używał osobnej bazy dla każdej subdomeny i dodatkowo korzysta z wildcard'a dla sudomen. Do tej pory miałem własnej roboty skrypt w PHP, który z głównej bazy czytał dane dla subdomeny i ładował resztę plików dla danej subdomeny. Przepisywanie .htaccess'em.
Widzę, że Zend ma klasę Router_Hostname, która rozwiązuje problem samych subdomen. Nie wiem teraz jak mam ładować ustawienia bazy danych. Dla 1 sudomeny wszystko działa, a jakoś nie uśmiecha mi się, żeby pisać skrypt, który wrzuci całego Zend'a do kolejnych katalogów i zmieni dane bazy, bo będzie to wymagało ogrmnej powierzchni przy większej ilości subdomen (teraz jest koło 100, więc 700MB by potrzeba dla projektu).

Go to the top of the page
+Quote Post
batman
post 13.06.2010, 19:14:06
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Wybacz, że rzucę hasłami, ale nie mam teraz dostępu do serwera, w związku z czym nie mogę pokazać przykładowego kodu.

1. Korzystasz z routera Hostname, gdzie każda subdomena wskazuje na osobny moduł. Moduły to takie mini aplikacje w ZF.
2. Do baz wielu danych możesz skorzystać z zasobu aplikacji o nazwie multidb (Zend_Applicaion_Resource)
3. Ustawianie odpowiedniej bazy możesz zrobić w pliku Bootstrap każdego modułu lub w globalnym pluginie, który wykryje jaki jest bieżący moduł i podłączy odpowiednią bazę.

O modułach znajdziesz u mnie na blogu. Router Hostname będę opisywał niedługo winksmiley.jpg


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
misiek08
post 13.06.2010, 20:04:34
Post #3





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

Ostrzeżenie: (10%)
X----


Do modułów jeszcze nie doszedłem. Na razie książka i podstawy + właśnie taki eskperyment.
Go to the top of the page
+Quote Post
zegarek84
post 13.06.2010, 20:49:01
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Cytat(misiek08 @ 13.06.2010, 18:18:01 ) *
Teraz mój problem:
Mam system, który do tej pory używał osobnej bazy dla każdej subdomeny i dodatkowo korzysta z wildcard'a dla sudomen. Do tej pory miałem własnej roboty skrypt w PHP, który z głównej bazy czytał dane dla subdomeny i ładował resztę plików dla danej subdomeny. Przepisywanie .htaccess'em.
Widzę, że Zend ma klasę Router_Hostname, która rozwiązuje problem samych subdomen. Nie wiem teraz jak mam ładować ustawienia bazy danych. Dla 1 sudomeny wszystko działa, a jakoś nie uśmiecha mi się, żeby pisać skrypt, który wrzuci całego Zend'a do kolejnych katalogów i zmieni dane bazy, bo będzie to wymagało ogrmnej powierzchni przy większej ilości subdomen (teraz jest koło 100, więc 700MB by potrzeba dla projektu).
może na chwilę zapomnijmy o problemie i odwróćmy sytuację do:
  • mam wildcard'a na domenie
  • przepisuję adresy nie jawnie w .htaccess z subdomen na domenę główną i dopisuję dodatkowy parametr GET z subdomenami
  • mam domenę główną [zapominam już o subdomenach] i adres gdzie może wystąpić zmienna $_GET w której mam "subdomene"
  • pisze sobie sterownik bądź korzystam z gotowych gdzie na domenie głównej najważniejsze dane wejściowe zależą od parametru/zmiennej bądź jej braku $_GET określającej subdomenę [przy braku brak subdomeny]


więc problem został uproszczony do odpowiedniego wpisu w .htaccess i uzależnienia tego wszystkiego od jednej zmiennej gdzyz wszystko i tak masz przekierowane na tą domenę główną - a więc wszędzie ścieżki są takie same... WIĘC NIE JEST POTRZEBNA WIĘKSZA POWIERZCHNIA DYSKOWA...


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
misiek08
post 14.06.2010, 21:52:21
Post #5





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

Ostrzeżenie: (10%)
X----


@zegarek84 - wszystko o czym piszesz to prawda, ale jest 1 zasadniczy problem. To wszystko mam napisane od ręki w "czystym" PHP. Teraz chcę to do Zend'a przenieść.

Może ktoś z jakimś przykładem? Problem polega na potrzebie ładowania innych ustawień bazy danych dla każdej subdomeny. Resztę już sobie opiszę w bazie i na kontrolerach.

EDIT:
Znalazłem już chyba rozwiązanie problemu.
http://jaybill.com/2007/09/12/using-the-ze...iple-databases/

Kod
$databases = new Zend_Config_Ini('./application/config.ini', 'databases');

Kod
$dbAdapter = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());


W czystym PHP napiszę sobie kod, który odczyta subdomenę i podstawi pod powyższy kod odpowiednie dane. Najgorsze jest to, że trzeba będzie zrobić połączenie z MySQL w czystym PHP, ale czego sie nie robi dla projektów.

Ten post edytował misiek08 14.06.2010, 21:53:19
Go to the top of the page
+Quote Post
zend
post 14.06.2010, 22:21:44
Post #6





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


Czemu nie zrobisz tak jak napisał batman? Nie licząc tego, wszystko jest ok
Cytat
1. Korzystasz z routera Hostname, gdzie każda subdomena wskazuje na osobny moduł.

Moduły są te same, a w pluginie który podpinasz do Zend_Controller_Front ustawiasz z jakiej bazy chcesz korzystać i po problemie
Co do multiDb w application.ini miał bym wątpliwości, polecał bym stworzyć osobny plik z konfiguracjami bazy zależnymi od subdomeny, ładować przez Zend_Config i przekazywać jako parametr konstruktora pluginu

Ten post edytował zend 14.06.2010, 22:24:07
Go to the top of the page
+Quote Post
misiek08
post 14.06.2010, 22:32:28
Post #7





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

Ostrzeżenie: (10%)
X----


Nie będzie multidb. Będę czystym PHP pobierał z głownej bazy dane dla subdomeny i wstawiał na zasadzie:
  1. $link = mysql_connect(.....);
  2. mysql_select_db('main', $link);
  3. $subdomena = strtolower(array_shift(explode('.', $_SERVER['HTTP_HOST'])));
  4. $wynik = mysql_query('..... = '. $subdomena, $link);
  5. $wynik = mysql_fetch_array($wynik);
  6. $dbAdapter = Zend_Db::factory('pdo_mysql', $wynik);
  7. mysql_close($link);


Nie znam tak bardzo modułów i Zend'a, żeby zrobić to po Twojemu. Może jakiś przykład albo kod do tego?

Ten post edytował misiek08 14.06.2010, 22:35:31
Go to the top of the page
+Quote Post
zend
post 16.06.2010, 14:03:12
Post #8





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


  1. domena.password = 'xxx'
  2. domena.login = 'xxx'
  3. #itd


  1. //kod w botstrapie albo index'ie
  2. $c = new Zend_Config_Ini('bazy.ini');
  3. $plugin = new Databases($c);
  4. Zend_Controller_Front::getInstance() -> registerPlugin($plugin);


O pluginach przeczytasz tu
Go to the top of the page
+Quote Post
misiek08
post 16.06.2010, 17:27:30
Post #9





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

Ostrzeżenie: (10%)
X----


A mój sposó zły? Trzymanie danych baz w plikach to raczej dla mnie nie jest najlepsze rozwiązanie, bo wolę jednak mieć wszystko w bazie.
Go to the top of the page
+Quote Post
zend
post 16.06.2010, 19:37:21
Post #10





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


Twój projekt, Ty decydujesz smile.gif Rozwiązanie na bazie oszczędzi Ci trochę pamięci, bo jednak cały plik trzeba załadować
Go to the top of the page
+Quote Post
misiek08
post 17.06.2010, 23:39:25
Post #11





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

Ostrzeżenie: (10%)
X----


Mi chodzi o taką elastyczność w pewnym sensie i jednolitość, ponieważ wszystkie dane chce trzymać w bazie i nic nie trzymać w plikach. Dziękuję za odpowiedź i za nakierowanie na mój własny pomysł.

Jak ktoś ma jakieś uwagi czy dodatkowe pytania do tego samego tematu, to można by ten topic podpiąć jako ciekawy temat. Jest trochę takich aplikacji wildcard'owych. Np. Wordpress MU
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 12:56