Jak sobie zyczysz, mam latwiejsze

Moim celem bylo, aby zrobic mozliwie najmniejsza iloscia zmian w czymkolwiek, lacznie z jak najmniejsza iloscia kopiowanych plikow. Zupelnie "przypadkiem" wczoraj odkrylem pewna mozliwosc w apachu, ktora wszystko uproscila. Przegladalem sobie jakiegos conf'a z netu i zobaczylem uzycie dyrektywy LoadFile w jakims zupelnie innym kontekscie, oczywiscie czym predzej sprawdzilem czy to dziala tak jak mysle i na szczescie tak wlasnie bylo.
Wiec dyrektywa ta powoduje, ze mozemy sobie zaladowac dowolna biblioteke niezaleznie od jej sciezki, mozemy zaladowac np. php4ts.dll z katalogu samego php4, bez koniecznosci przenoszenia go do apache/bin. Dzieki temu pozbylem sie wszystkich plikow zwiazanych z php a apache/bin, a mialem ich tam troche. Teraz znowu jest porzadek a i upgrade do kolejnej wersji php sie znacznie upraszcza.
Wiec zaczynamy.. Cala zmiana polega na kilku linijkach w httpd.conf.
Oto one:
Kod
<IfDefine !_php5_>
Listen 80
LoadFile /usr/php/dlls/libmysql.dll
LoadModule php4_module /usr/php/sapi/php4apache2.dll
AddType application/x-httpd-php .php
</IfDefine>
<IfDefine _php5_>
Listen 88
LoadFile /usr/php5/ext/php_mbstring.dll
LoadFile /usr/php5/libmysql.dll
LoadModule php5_module /usr/php5/php5apache2.dll
AddType application/x-httpd-php .php
PHPINIDir /usr/php5/
</IfDefine>
# wszystkie inne dyrektywy Listen czy tez LoadModule phpX_module .. nalezy usunac z httpd.conf, koniecznie!!
To co jest w pierwszym IF'ie wykonuje sie gdy odpalamy apacha z php4, a to co w drugim gdy odpalamy z php5 (pozniej o tym czym rozni sie samo odpalanie).
Co widzimy po kolei? Najpierw ustawienia portu, dla kazdej wersji inny, potem zaladowanie biblioteki libmysql.dll, ktora nie musi byc juz w C:\windows, apache\bin czy innym katalogu z %PATH%. Nastepnie dwie standardowe linijki ladujace modul do php4. Mozna dodac jeszcze
PHPINIDir /sciezka/do/php4/ini/, ja akurat to pominalem, bo chce miec osobne ini do php jako modulu apacha i do wersji CLI, ktorej uzywam jako interpretera skryptow.
W drugim IF'ie dotyczacym php5 jest podobnie, z tym ze laduje dodatkowo jeszcze jedna biblioteke, od ktorej jest zalezne rozszerzenie php_exif.dll, ktore mam wlaczone. No i tutaj mam zmieniony katalog, z ktorego pobierany jest php.ini dla php5, bez tego nastapilby konflikt, bo sciezka poszukiwan php.ini jest taka sama w obu wersjach, a one nie sa kompatybilne (chocby dlatego, ze rozszerzenia z php5 nie pasuja do php4 i vice versa). To w zasadzie wszystko.. wypadalo by jeszcze na wszelki wypadek wrzucic php4ts.dll i php5ts.dll odpowiednio do katalogow z rozszerzeniami danej wersji php.
Pora wrocic do uruchamiania tego. To co napisze tyczy sie tylko WinNT/2k/XP/2k3.
A wiec wchodzimy do katalogu apache/bin z wiersza polecen (cmd.exe).
Teraz wykonujemy kolejno dwie instrukcje:
apache -D _php5_ -n Apache2php5 -k installi
apache -n Apache2 -k installPierwsza instaluje usluge apacha'a z dodatkowym parametrem -D _php5_ , ktory to powoduje, ze jest ustawiana dyrektywa _php5_, co przydaje sie w configu do apacha (mozna w nim sprawdzac IF'ami czy dana dyrektywa zostala ustawiona, co tez wykorzystalem). Druga usluga to "zwykly" apache z php4.
Teraz mozna sprawdzic czy wszystko dziala odpalajac po kolei obie uslugi.
Opis instalacji uslugi dotyczyl Apache 2.x ale na 1.3 robi sie to bardzo podobnie, jesli nie tak samo..
Nie gwarantuje, ze to odrazu zadziala, u mnie w kazdym razie smiga pieknie ;] W razie problemow, piszcze z dokladnym opisem bledu i w ktorym miejscu sie on pojawia, postaram sie pomoc.
Jesli sie uda, jestescie szczesliwymi posiadaczami dwoch apachow chodzacych na roznych portach, teraz zeby sprawdzic czy dany skrypt dziala na php5 (lub odwrotnie) wystarczy do adresu skryptu dopisac odpowiedni port.