Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php4 i php5 równolegle jako moduł
Forum PHP.pl > Forum > Serwery WWW > Apache
scanner
php 5.0.0 beta 2 startuje już jako php5_module. Jak powiedział BelMondo, teraz możn asie pobawić w rownoczesne startowanie "4" i "5" bez kombinowanie modul/cgi.

Probowalem to zrobić:
Cytat
LoadModule php4_module e:/tools/php4/sapi/php4apache2.dll
LoadModule php5_module e:/tools/php5/sapi/php4apache2.dll

DirectoryIndex index.html index.htm index.php index.php4 index.php5

AddType application/x-httpd-php4 .php4
AddType application/x-httpd-php5 .php5


copy php4/php.ini-recommended -> %WIN_DIR%
(jak mniemam oba php'y pójda na tym samym ini-file)

i teraz hmm..
obie dystrybucje maja php4ts.dll które oczywiście są różne.
teoretycznie powinno się skopiować tenże plik do %APACZE_DIR%/bin ale.. no właśnie.... jeden nadpisze drugi, a tak byc nie może..

to samo dotyczy libmysql.dll - sa dwa różne.

Czy ktoś już to robił i działa?
Przyznam, że bez tego mój wartszta jest lekko niedziałający - skrypty na zlecenie piszę pod czwórkę a chcę już wprawiać się w OOP dla piatki..
FiDO
Cytat
Czy ktoś już to robił i działa?
Przyznam, że bez tego mój wartszta jest lekko niedziałający - skrypty na zlecenie piszę pod czwórkę a chcę już wprawiać się w OOP dla piatki..

Zainstaluj jeden jako modul, drugi jako CGI...

Jeszcze dawno, dawno temu jak php5 nie ladowal sie jako php5_module obszedlem to jakos (niespecjalnie pamietam juz jak, ale grzebalem hexeditorem), ale wlasnie nadal pozostal problem nie do przeskoczenia, czyli php4ts.dll... Niestety dla obu php'ow sciezka poszukiwan jest dokladnie taka sama (sprawdzane FileMonitor'em), wiec nie mozna tego rozdzielic na osobne katalogi.
Pozostaje czekac, az wpadna na genialny w swej prostocie pomysl brania php4ts.dll z katalogu samego php.
scanner
chcę mieć dwa moduły tongue.gif A taki jestem pazerny smile.gif
Na wszelki wypadek zapytałem tutaj:
http://www.faqts.com/knowledge_base/view.p.../26890/fid/1150
FiDO
No ja tez chcialem 2 moduly, ale nie wyszlo smile.gif
Moze znajdzie sie ktos swietlejszy kto zna jakis tajny sposob. winksmiley.jpg
Jak juz znajdziesz rozwiazanie to nie omieszkaj go tu napisac, chetnie poznam...
scanner
No cóż. Szperając troszkę na http://www.zend.com znalazłem:
http://zend.com/phorum/read.php?num=3&id=2...=0&thread=26709

Natomiast na http://bugs.php.net znalazłem:
http://bugs.php.net/bug.php?id=22190
Błąd jest oznaczony jako Critical i niestety nie pozostało nam nic innego jak.. czekać..
FiDO
Ok, wiec przeczytalem w jakims topicu, ze w koncu zmienili php4ts na php5ts, czyli usuneli chyba najwieksza przeszkode w postawieniu obu wersji php jako modul na jednym apache'u.

Oczywiscie nie moglem tego nie sprawdzic. Tak jak sie spowdziewalem... dziala! 8)

Jest tylko jedno (a w zasadzie dwa) ALE. Nadal nie zmienili defnicji MIME-Type dla plikow php, ktora dla obu wersji pozostaje ta sama (application/x-httpd-php), co dosc skutecznie utrudnia koegzystencje obu php (akcje definiuje sie wlasnie po MIME-Type - w przypadku CGI nie jest to problemem, bo mozna zdefiniowac swoje).
Ale z tym problemem uporalem sie juz dawno... wiec i teraz nie sprawilo mi to klopotu. Jako ze ten MIME-Type nie jest zapisany w Apache'u tylko w module php i jest odczytywany podczas startu apache'a, to zatrudnilem ponownie hexeditora w poszukiwaniu ciagu znakow application/x-httpd-php. Oczywiscie takowy znalazlem i zamienilem na application/x-http-php5 (musi byc taka sama ilosc liter, choc jak bede mial dostep do VC++ to sprobuje zmienic w zrodlach i przekompilowac).

Proba wlaczenia apacha... zwis (apacha oczywiscie). Co jest grane? Ano przeciez php5 ma ta sama sciezke poszukiwan php.ini, wiec zaczal czytac konfiguracje php4. Niby nic zlego, bo prawie nic sie nie zmienilo, ale niestety extensions_dir wskazuje na "stare" rozszerzenia, ktore php5 niespecjalnie rozumie i robi psikusa winksmiley.jpg
Na szczescie i to jest zapisane w samym php, a konkretnie w php5ts.dll (ktory juz jest osobny dla php4 i php5 wiec mozna w nim pogrzebac). No wiec znowu bylo trzeba odpalic hexeditora i zmienic ciag php.ini na cos innego o tej samej ilosci liter (ja dalem ph5.ini). Teraz juz kazda wersja ma swojego php4ts, swoj MIME-Type i swoj php.ini, wiec jeszcze tylko male przystosowanie ph5.ini do opcji ktore mam w php4 i proba generalna..

Apache wystarowal, polowa sukcesu. Jeszcze tylko krotki test z phpinfo() na plikach o rozszerzeniach .php5 i .php i juz bylem swiadkiem apache'a smigajacego z dwoma php jako modul...


Dziekuje za uwage smile.gif

PS. jak ktos nie ma narzedzi, badz nie potrafi wyedytowac plikow binarnych hexeditorem to wystawiam gotowe pliki do podmiany ze snapshota sciagnietego dzisiaj kilka godzin temu :arrow: http://willow.iie.uz.zgora.pl/~ipatalas/php5.rar
scanner
FiDO: normalnie aż sam sprawdzę smile.gif) Aleś mnie ucieszył - a najlepsze, ze jakoś mi uciekł ten Twój post do przeczytanych niezauważalnie...
FiDO
Caly czas czekalem, az tu trafisz.. zaczynalem sie bac, ze straciles zainteresowanie topiciem winksmiley.jpg
scanner
Bynajmniej FiDO, bynajmniej.
Włąsnie końcże pisąc artykuł dla php.pl o instalacji Apache/php/MySQL (developerzy mogą go obejrzeć w CVSie w module articles) i taka dodatkowa solucja jak postawić tandem na pewno się w nim znajdzie smile.gif
sztosz
My mamy Boskiego FiDO a chłopaki z php się meczą. Dzięki wielkie!
FiDO
Heh.. i tylko po to odswiezyles ten topic?

BTW ten sposob dziala na wersji finalnej? prawde mowiac nawet nie sprawdzalem, odrzucilem ten sposob, bo ciagle zmiany rozszerzen nie podobaly mi sie.

Teraz musze popracowac nad czyms innym.. Jeden i ten sam apache, ale na dwoch portach, jeden na php4, drugi na php5, zmiana rozszerzenia jest raczej uciazliwa, restartowac apacha tez nie zawsze mi sie chce. Przyjmuje zalozenie, ze konfig ma byc jeden, bede odpalal po prostu dwa razy apacha z roznymi ustawieniami. Moze to nie byc takie latwe (spodziewam sie juz kilku przeszkod) jak ten poprzedni sposob, ale powalcze. Chcialbym, zeby obylo sie tym razem bez uzycia hex edytora, tak aby bylo to w miare przystepne dla niewtajemniczonych, chociaz boje sie, ze moze sie nie udac...
Jak cos zdzialam to sie odezwe tutaj, mysle ze niejednemu sie przyda. Nie obiecuje jednak, ze bedzie to na dniach, bo mam tez inne zajecia, jak bedzie to bedzie smile.gif

---update:
uch.. posiedzialem wczoraj 15 minut i zrobilem, okazalo sie to duzo prostsze niz myslalem, bez jakiegokolwiek grzebania w plikach, wystarczy odpowiedni httpd.conf, szczegoly podam wieczorem.
sztosz
Temat odświerzyłem bo byłem zostałem tu przekierowany winksmiley.jpg. Sbosób Fido do domowych testów jest dobry, ale czekam z utęsknieniem na lepsze rozwiązanie. biggrin.gif
FiDO
Jak sobie zyczysz, mam latwiejsze smile.gif

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 install
i
apache -n Apache2 -k install
Pierwsza 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.
jackkill
Warto dodac, ze nalezy usunac lub zhaszowac linijke definiujaca port np.
Listen 80
Chyba zostalo to pominiete, a bez tego serwer bedzie wyszolony i nie odpali. Chociaż w sumie kazdy powinien sie tego domyslec.
FiDO
Chyba jednak nie pominalem tego.. zobacz koncowke tego co umiescilem w [ CODE]
chociaz fakt faktem, ze malo to widac (bylem pewien, ze to gdzies napisalem, a przez 5 minut szukalem tego przed chwila smile.gif ), wiec moze to i dobrze ze napisales.
mikolus
Odnosnie tego listen, zrozumielaem to tak, ze szukac nalezy dyrektywy listen dotyczacej php, a ze takowej nie znalazlem, to nie zastanawialem sie dalej nad tym. Dopiero po nieudanej probie uruchomienia serwera skapowalem, ze chodzi o to, o co chodzi. Ogolnie fajny opis, dziala wysmienicie.
bela
Kod
<IfDefine !_php5_>
Listen 80

LoadFile c:/gry/php/php4/dlls/libmysql.dll
LoadModule php4_module c:/gry/php/php4/sapi/php4apache2.dll
AddType application/x-httpd-php .php
PHPINIDir c:/gry/php/php4/
</IfDefine>

<IfDefine _php5_>
Listen 88

LoadFile c:/gry/php/php5/ext/php_mbstring.dll
LoadFile c:/gry/php/php5/libmysql.dll
LoadModule php5_module c:/gry/php/php5/php5apache2.dll
AddType application/x-httpd-php .php
PHPINIDir c:/gry/php/php5/
</IfDefine>


dopisałem to, zahaszowałem Listen, w monitorze apacha widze Apacha2php5, ale gdy klikam na start ukazuje sie błąd "The Requested Operation has been failed"

edit
uruchamiając przez cmd.exe apache z parametrem -D _php5_ jest dobrze co zrobic aby przez apache monitor uruchamiać ?

edit2
z php5 plik są wyswietlane jako pusta strona dry.gif
slash12345
Windows nie jest dobrą platforma pod Apache/php. Na Linuxie łatwo da sie podpiąć PHP4 i PHP5 jako moduły. Na moim Ubuntu działają perfekcyjnie. W razie pytań - post.
filip14
To ja poproszę o info jak uruchomić na platformie Linux/apache/mysql zarówno php4 jak i php5.
Dzieki

pozdrawiam
filip14
slash12345
Paczta ludzie! Paczta i dziwujta się, bo oto powstało php któren może współpracować z innym jako moduł!
Zapodaję wam link do owegóż php, do wersji 4 i 5 mogących działać razem jako moduły Apache (wersja Unix/Linux)
php 4
php 5

Instalujemy jak zwykle ale zamiast:
Kod
AddType application/x-httpd-php .php #to działało z jednym php

dajemy
Kod
AddType application/x-httpd-php4 .php4
AddType application/x-httpd-php5 .php .php5

EDIT: Numery wersji zostały też dołączone do typów MIME dotyczących źródeł php.

I tak właśnie mamy dwa równoległe php jako moduły, bez bawienia się w edycję .so i hexów.
Jeśli chcecie wziąć udział w inicjatywie łatwej instalacji php, pobierzcie te archiwa i zapewnijcie im mirrory. Z góry dziękuję!
Fo
witam,

a cóż to za magiczny sposób, którego użyłeś.

czy doprawdy uważasz, że na swoich maszynach, niekiedy jedynie developerskich ale zawsze to swoich, ludzie zaczną montować twoje przekształcone o niewiadomo co źródła ? jest to bynajmniej niebezpieczne, ponieważ nie dla wszystkich jesteś znany, i bez udokumentowania tego co wprowadziłeś do udostępnionych przez Ciebie źródeł, pomysł instalacji jest dobry dla tych, którzy nie mają nic do stracenia.

nie to żebym był przeciwko, bo owo rozwiązanie, dwóch php jako moduł, czy też X wersji php jako moduły dla jednego serwera httpd, była kwestią, z którą borykałem się niegdyś całkiem długo, aż wkońcu prace porzuciłem ze względu na zbyt małą ilość dostępnego czasu.

jeżeli twoje rozwiązanie jest na tyle dobre, to może zaproponuj aby sztab osób z php.net, który jest odpowiedzialny za obecny development, zastosowało je przy budowie swoich źródeł i wtedy napewno nie będzie problemu jeżeli chodzi o samą dostępność Twojego rozwiązania.

bo patrząc na to z innej strony - co miałbym zrobić w momencie kiedy musiał bym dokonać masowej instalacji na 30 serwerach w przeciągu 60 godzin. a repozytoria z twoimi źródłami były by nie dostępne. chce tutaj przez to jedynie powiedzieć iż nie dobrze jest gdy istnieje wiele mirrorów, z których to można sobie pobrać takie czy zupełnie inne wersje źródeł. wprowadza to bynajmniej zamęt i zamieszanie, bo tak naprawdę czy jesteś w stanie każdą wersję php modifikować o swoje rozwiązanie ? jeżeli tak to podziwiam Cię i zazdroszcze ilości wolnego czasu.

rozwiązania niestety nie przetestuje do momentu kiedy nie ujawni się ono na ogólnie dostępnych serwerach mirrorowych php.net

z poważaniem,
Artur Kwiatkowski
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.