Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Apache _ Uruchamianie PHP 4 i PHP 5 na jednym serwerze

Napisany przez: DeyV 6.08.2004, 19:49:50

Wiele razy pojawiał się temat tego, jak tego dokonać, to znaczy jak umożliwić odpalenie tych 2 wersji php na jednym serwerku.
Jak się okazuje, problem nie jest łatwy, i choć ponoć jest kilka sposobów na jego rozwiązanie - nie są to rzeczy łątwe do zrobienia.

W związku z tym bardzo ucieszyło mnie pojawienie się pakietu, który omija ten problem odrobinę inaczej - tj. na zasadzie przełączania się na tą drugą wersję php.
Umiejętność taką posiada pakiet http://www.wampserver.com/en/index.php
(składający się domyślnie z Apache 1.3.31, php 5.0.0 and MySQL 4.0.18.) po zainstalowaniu dodatku http://www.wampserver.com/en/add-ons.php
Pakiet jest przeznaczony dla użytkowników windowsów, i sprawdza się bardzo dobrze jako serwerek to testowania własnych skryptów, szczególnie w okreśie przejściowym z PHP4 na PHP5.

Gorąco polecam

Napisany przez: Jojo 6.08.2004, 23:29:36

Ciekawa koncepcja z tym serverem...
Ja natomiast zastosowałem się do porad FiDO z http://forum.php.pl/index.php?showtopic=7802 tematu. Działa jak burza: Apache/2.0.49 (Win32) php/4.3.7 php/5.0.0RC3

Nurtuje mnie tylko pytanie jak to jest z instalacją dwóch wersji php pod jakimś systemem Unix-owym. Ja nigdy nie próbowałem, ale niedługo będę musiał i zastanawiam się czy ktoś nie ma jakichś doświadczeń.

Napisany przez: FiDO 11.08.2004, 21:07:52

Jojo: tez za jakis czas bede sie podejmowal tego wyzwania, gdybys byl pierwszy i Ci sie uda, to napisz, w przeciwnym wypadku ja napisze smile.gif

DevY: mozesz mi jakos po krotce opisac na jakiej zasadzie dziala ów przełączanie miedzy wersjami php ? Niezbyt mam mozliwosc sprawdzenia na kompie przy ktorym siedze tego pakietu, a na dyskietke to on raczej nie wejdzie..


---edit:
Jojo: udalo mi sie smile.gif Robilem analogicznie do tego co napisalem tutaj http://forum.php.pl/index.php?showtopic=7802&view=findpost&p=121363
Oczywiscie pomijajac instalowanie uslugi i inne windowsowe rzeczy. Nie trzeba sie na linuxie martwic o sciezki do php.ini. Ja skompilowalem sobie oba pehapy w osobnym katalogu (/usr/local/php4 i /usr/local/php5), kazdy czyta php.ini ze swojego wiec nie trzeba sie o to martwic. Pozatym zadnych innych cudow nie robilem, zadzialalo odrazu.

Napisany przez: magaf 4.09.2004, 11:52:49

Na linuxie(rh fedora) php4+php5 mozna tez odpalic w pare sposobow. np. dwa apache kazdy na innym porcie lub php5 wkompilowany jako modul cgi .Ja chcialem aby pliki z rozszerzeniem .php byly kompilowane przez kompilator php4 , .php5 -> php5.
Skomilowalem php5 jako cgi i smiga na jednym apachu php4 i php5.To chyba najlepsze rozwiazanie jakie udalo sie znalesc
Pozdrawiam

Napisany przez: FiDO 4.09.2004, 18:48:59

To jest najprostsze rozwiazanie ale ma swoja wade.. nie mozna w latwy sposob sprawdzic czy dany skrypt lub nawet caly serwis zadziala na php5, musialbys zmieniac rozszerzenia wszystkich plikow. Rozwiazanie z dwoma osobnymi portami wydaje sie byc do tego lepsze, poniewaz przechodzenie miedzy wersjami php staje sie banalne i szybkie.

Napisany przez: anas 21.12.2004, 10:53:22

Witam.

Stanąłem przed tym samym problemem ale na Apache'u postawionym na FreeBSD w wersji 5.x - Apache z lini 1.3.x.

Co ciekawsze chciałem to zrobić nie w taki sposób, że PHP4 będzie chodziło jako moduł a PHP5 jako CGI - zamiana portów też mnie nie satysfacjonowała... chciałem aby obydwie wersje php chodziły jako moduł(ze względu na zmienne środowiskowe).

Poszperłame w sieci i znazłem http://www.digitalsandwich.com/archives/14-PHP5-and-PHP4-Running-on-SAME-apache-server.html w jaki sposób osiągnąc to co chciałem zrobić. Niestety moje męki nic przyniosły skutku chociaż robiłem wszystko zgodnie z opisami...

Na czym polegał sposób - otóż podobnie jak FIDO - z tym że korzystając z dobrodziejstwa UNIX'a i możliwości szybkiej kompilacji źródełek - pozmieniałem mime-typ PHP5 z x-httpd-php na x-httpd-php5... podobnie zrobilem z php_value, php_admin_value itd... sama zmiana zadzialala, gdyz udalo mi sie odpalic serwer www ktory parsowal pliki .php5 za pomoca x-httpd-php5 - ale jak dodam modul od PHP4 wszystko zaczyna sie sypac... Moze ktos z was probowal to osiagnac pod systemem Unixowym i wie jak temu zaradzic, lub co moze byc przyczyna bledow - dodam ze serwer potrafi sie uruchomic po zahashowaniu linijek AddModule i pozostawieniu LoadModule - ale nie parsuje plikow ani .php ani .php5.

Wpadlem tez na pomysl aby zamiany mime-type dokonac takze dla PHP4 i dzis bede probowal to zrobic - napsize jak mi poszlo...

dzieki za kazda wskazowke

pozdrawiam

anas

Napisany przez: orson 3.05.2005, 21:12:38

witam ...

no i mam problem ... podobno wszyscy wiedzą jak zrobić php5 jako cgi tylko chcą jako moduł ... otóż nie wszyscy winksmiley.jpg ... nie wychodzi mi w żaden sposób ... kawałek z mojego httpd.conf

Kod
# For php 4 do something like this:
LoadModule php4_module "c:/work/php4/sapi/php4apache2.dll"
AddType application/x-httpd-php .php

# For php 5
AddType application/x-httpd-php5 .php5
Action application/x-httpd-php5 "c:/work/php5/php-cgi.exe"
i wszystko niby cacy ale jednak nie ... serwer parsuje php - jako 4 - poprawnie [wyświetla się php info z poprawnymi wartościami - php.ini i inne] ale jak dam plik php5 to wywala #400 - bad request - albo ściąganie pliku - który okazuje się plikiem tekstowym z ... errorem 400 ... już nie wiem co zrobić ... macie jakieś sugestie questionmark.gif

progamy:
apache 2.0.54
php 4.3.11
php 5.0.4

pozdrawiam

Napisany przez: FiDO 4.05.2005, 01:46:42

Musisz dodac ScriptAlias'a

Kod
ScriptAlias /php5/ c:/work/php5/
Action application/x-httpd5-php /php5/php-cgi.exe

Napisany przez: orson 4.05.2005, 07:24:51

witam ...

myślałem że to alias do patha do php biggrin.gif ... dodałem ale nadal nie działa ... wyskakuje dialog sciągania pliku ...

pozdrawiam

Napisany przez: FiDO 4.05.2005, 09:28:38

Nie zgubiles gdzies AddType'a po drodze? Bo jego brak dla danego rozszerzenia moglby powodowac probe sciagniecia pliku...

U siebie sprawdzalem na takim cfg:

Kod
ScriptAlias /php5/ /usr/php5/
AddType application/x-httpd-php5 .php5
Action application/x-httpd-php5 /php5/php-cgi.exe

i wszystko smiga jak nalezy z i bez php4 rownolegle. Sprobuj moze najpierw odznaczyc wszystkie opcje dotyczace php4, zeby dzialalo Ci samo php5. A najlepiej to wystaw swojego httpd.conf'a i daj linka (tylko nie wklejaj do posta...), moze cos innego naknociles smile.gif

Napisany przez: matid 4.05.2005, 15:29:33

Cytat(FiDO @ 2004-09-04 19:48:59)
To jest najprostsze rozwiazanie ale ma swoja wade.. nie mozna w latwy sposob sprawdzic czy dany skrypt lub nawet caly serwis zadziala na php5, musialbys zmieniac rozszerzenia wszystkich plikow. Rozwiazanie z dwoma osobnymi portami wydaje sie byc do tego lepsze, poniewaz przechodzenie miedzy wersjami php staje sie banalne i szybkie.

Można,

Wystarczy stworzyć plik .htaccess z treścią:
Kod
<Files *.php>
ForceType application/x-httpd-php5
</Files>

Napisany przez: orson 4.05.2005, 16:21:20

Cytat(FiDO @ 2005-05-04 09:28:38)
Sprobuj moze najpierw odznaczyc wszystkie opcje dotyczace php4, zeby dzialalo Ci samo php5. A najlepiej to wystaw swojego httpd.conf'a i daj linka (tylko nie wklejaj do posta...), moze cos innego naknociles smile.gif

witam ...

a co tam jest do naknocenia questionmark.gif php5 i php4 działają jak są same ... php5 przestaje działać jak zmienie application/x-httpd-php na application/x-httpd-php5 ... już wtedy nie parsuje pliku
fragment z działającego confa
Kod
ScriptAlias /php/ "c:/work/php5/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php-cgi.exe"

zmieniam na
Kod
ScriptAlias /php5/ "c:/work/php5/"
AddType application/x-httpd-php5 .php5
Action application/x-httpd-php5 "/php5/php-cgi.exe"

i przestaje działać ... plik index.php5 wywala ekran ściągania pliku :|

całego konfiga nie będe wystawiał bo nie ma sensu ... w porównaniu z defaultowym zmieniłem tylko port nasłuchu z 80 na inny, serwer roota, może coś tam jeszcze ... ale nawet jak dałem defaultowy to była kapa ...
może ta wersja jest jakaś nie teges questionmark.gif
pozdrawiam

Napisany przez: FiDO 5.05.2005, 01:00:10

No ciekawe.. nie powiem.. smile.gif

Sam PHP5 ale na application/x-httpd-php5 tez nie dziala?

Co do wersji to jak widzisz mam prawie identyko.. jutro jak znajde czas to zrobie upgrade apacha, zeby byla pelna zgodnosc i wtedy jeszcze raz zobacze.

Aha.. jeszcze jedno.. zajrzyj do error.log'a od apacha zaraz po wywolaniu w przegladarce pliku .php5, moze bedzie tam cos co bedzie moglo pomoc.

Napisany przez: orson 5.05.2005, 22:58:00

witam ...

to był sam php5 ... i działa jako cgi ale jak tylko zmienie na application/x-httpd-php5 to przestaje :| ... już nie wiem co zrobić ... a miało być takie strasznie łatwe ...

pozdrawiam

Napisany przez: FiDO 7.05.2005, 15:09:12

No bo to jest latwe.. specjalnie zainstalowalem sobie nowego apacha (czyli juz wszystko w takiej samej wersji jak Ty masz), dodatkowo wrzucilem domyslny config apacha z httpd.conf.default, zeby nie bylo, ze cos mialem dziwnego wykombinowanego. Jedyne co zmienilem to DocumentRoot'a oraz dodalem te 3 linie do php i dzialalo zarowno na x-httpd-php5 jak i na domyslnym typie.
Sprawdzales logi czy nic tam nie ma ciekwego ?

Napisany przez: orson 7.05.2005, 19:51:16

witam ..

nieeeeeeeeeeee no nie wiem co jes ... chyba magic ... albo config który przychodzi z apachem jest uwalony albo już nie wiem co ... zrobiłem tak jak FiDO ... wziąłem default.conf dopisałem moduł z 4 i path do 5 jako cgi i poszło exclamation.gif za pierwszym razem ... szkoda że wywaliłem ten zły conf ... chciałbym się dowiedzieć co robiłem źle ... thx za pomoc FiDO już smiga ...

pozdrawiam

Napisany przez: Fo 17.05.2005, 17:30:54

@Odnosnie montazu na platformach Linux

juz duuuzo czasu minelo od chwili kiedy ten temat zaistnial ale mysle ze z problemem dalej ludzie sie borykaja, mnie udalo sie to zrobic na jednym apache2, bez zdanej zabawy z typami mime, kodem zrodlowym, bez zgrzytow. niewiem jak to jest, czasem poprostu 0,5 na stole wszystko upraszcza cool.gif . Niedlugo zamierzam wszystko spisac w jedna calosc i zarzucic tutaj na forum serwerowym - mam tutaj na mysli kompletna instalacje apache2+CGI+php4+php5+mysql+postgresql. A tymczasem borem lasem podam moze to jak udalo mi sie osiagnac to czego chcialem :

Cytat("httpd.conf")
DirectoryIndex index.html index.php index.php4 index.php5 index.pl index.cgi

#php4 support
LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4

#php5 support
AddType application/x-httpd-php5 .php5
ScriptAlias /php/ "/usr/local/php5/bin/"
Action application/x-httpd-php5 "/php/php"


chyba najkrotsze i najprostsze rozwiazanie jesli chcemy miec to wszystko na jednej puszce ( u mnie apache2 ) bez zadnej zabawy z mod_proxy, bez zadnej zabawy z typami mime w zrodlach, poprostu czysto : montaz php4 statycznie jako modul ( ./configure --with-apxs2=/usr/local/apache2/bin/apxs ) i php5 jako CGI ( --enable-fastcgi --enable-force-cgi-redirect , BEZ --with-apxs2=/usr/local/apache2/bin/apxs exclamation.gif )

niewiem tylko jak tutaj wyglada sprawa z dostepnoscia zmiennej srodowiskowej $_SERVER - ale pracuje caly czas nad tematem i jezeli de facto bedzie z tym problem ( gdzies tu na forum widzialem podobny temat o php4+php5 jako moduly chyba na dwoch apache ) to byc moze za jakis czas naskrobie i taka wersje ktora bedzie taktowala o dwoch apache i dwoch php ( php4+php5 ) - tak zeby wszystko smigalo jeszcze lepiej.

pozdro ya winksmiley.jpg

edit: nie bardzo sie znam na samym php - ja tu tylko montuje co trzeba :] ale phpinfo(); ladnie wyswietla wszystkie zmienne $_SERVER smile.gif chyba ze patrze na to co nie jest istotne, wtedy prosze o sprostowanie winksmiley.jpg

Napisany przez: anas 17.05.2005, 19:28:30

Hej.

Jezeli chodzi o to rozwiazanie - zrobic to mozna bez problemu, ale raczej borykamy(lub borykam) sie ze zrobieniem tego jako dwa moduly... w czym rzecz, a no w tym, ze chodzi nie tylko o zmienna $_SERVER, ale takze wykonywanie skryptow z prawami uzytkownikow... kilka rzeczy sklada sie na to, ze wskazana na serwerach u mnie w firmie jest wersja jako modul, nie w otoczce CGI.

Udalo mi sie to osiagnec poprzez przekierowywanie wewnetrzne PROXY + mod_rewrite do wykrywania wywolan skrypto z roszerzeniem .php5... -> ale nie dziala to rewelacyjnie - chociaz dziala.

Kolejna sprawa to czy nie zastanawial sie ktos z was jak np. dac userowi mozliwosc przelaczania sie pomiedzy wersjami php dla wybranych VHOSTow? Chodzi mi o to, aby np. user w htaccess okresla z ktorej wersji php skorzysta, albo lepiej, na sztywno w konfiguracji vhosta to ustalac - oczywiscie jako moduly, a dwa zeby sie nie gryzly, na porcie 80 all rzecz jasna

pozdrowka

anas

Napisany przez: Fo 17.05.2005, 21:15:12

@anas : zaglebiam sie wlasnie w makulature : http://httpd.apache.org/docs-2.0/mod/core.html#ifdefine

- niewiem, czy tego moze probowales ? bo w sumie mialo by to na pierwszy rzut oka rece i nogi - jak rozszerzenie jest php lub php4 to zaladowywuje sie modul php4_module a jak php5 no to php5_module, tylko skolei jeszcze troszeczke za bardzo niewiem jak sie w to konkretnie wgryzc ... hmm

Napisany przez: naox 5.07.2005, 20:18:07

czesc. ja tez probuje zrobic na 1 apache php 4.x i 5.x na raz. chcialem zrobic 2 moduly, ale nawet jak zmienialem source php 4.x odpowiednio na inne x-httpd- itd to mi sie apache wieszał. ale nie o to chodzi. skoro nie da sie 2 modułów to mam php5.x jako moduł a 4.x jako cgi wiec trzeba.

uprzedzam ze 1 raz instalowałem php jako cgi...
AddType application/x-httpd-php54php4
ScriptAlias /php/ "/usr/local/php4bin/"
Action application/x-httpd-php4"/php/php"


wszystko ładnie ... ale serwer zwraca dla .php4 internat server error 500. Czy jest cos co powinienem wiedziec o uruchamianiu php jako cgi zeby to zaczeło działac?

log apache mówi
premature end of the script headers: /usr/php4-cgi/bin/php
z góry dzieki za pomoc.

Cytat
Kolejna sprawa to czy nie zastanawial sie ktos z was jak np. dac userowi mozliwosc przelaczania sie pomiedzy wersjami php dla wybranych VHOSTow? Chodzi mi o to, aby np. user w htaccess okresla z ktorej wersji php skorzysta, albo lepiej, na sztywno w konfiguracji vhosta to ustalac - oczywiscie jako moduly, a dwa zeby sie nie gryzly, na porcie 80 all rzecz jasna


a nie da sie tego umieszczajac recznie lub tez nakazujac userom umieszczenie


ForceType application/x-httpd-php5

w .htacces?

Napisany przez: eai 7.06.2006, 08:43:46

Witam.

Ja problem postawienia php 5.1.4 i php 4.4.2 na Apache 2.2.2 (WindowsXp) rozwiązałem za pomocą VirtualHostów

1. Edytujemy plik hosts w katalogu c:\WINDOWS\system32\drivers\etc\ i dopisujemy wartość:

Kod
127.0.0.1       serwer.php4


2. Teraz edytujemy plik httpd.conf w katalogu Apache2\conf\ i na dole dopisujemy:

Kod
<Virtualhost serwer.php4>
     ServerName serwer.php4
     ServerAdmin me@serwer.php4
     DirectoryIndex index.html index.php
     ErrorLog logs/error.log
     <Location />
       <Limit CONNECT>
         Order allow,deny
         Allow from all
       </Limit>
     </Location>
      # Wskazujemy katalog www z plikami php
     DocumentRoot "C:/www/katalog_php4"
     # Wskazujemy katalog z plikami binarnymi php4
     ScriptAlias /cgi-bin/ "C:/serwer/php4/"
     Action     php4-script /cgi-bin/php.exe
     AddHandler php4-script .php4
</Virtualhost>


I to wszystko. Aby host serwer.php4 zadziałał należy ponownie uruchomić WindowsXp (ponowne wczytanie pliku hosts) i uruchomić apache do katalogu C:/www/katalog_php4 umieścić plik test.php4 i wywolac funkcje phpinfo();

Oczywiście testowane i działa smile.gif)

Napisany przez: sopel 7.06.2006, 08:56:11

dla użytkowników Gentoo polecam http://www.gentoo.org/proj/en/php/php4-php5-configuration.xml

Napisany przez: FiDO 8.06.2006, 10:10:28

Cytat(eai @ 7.06.2006, 09:43 ) *
Aby host serwer.php4 zadziałał należy ponownie uruchomić WindowsXp (ponowne wczytanie pliku hosts)

Moze nie do konca na temat, ale.. nie trzeba restartowac WinXP. Zmiany w pliku hosts widoczne sa natychmiastowo.

Napisany przez: slash12345 30.06.2006, 13:17:36

Jak zainstalować PHP4 jako CGI, a PHP5 jako moduł apache? W httpd.conf mam coś takiego:

Kod
AddType application/x-httpd-php4 .php4
ScriptAlias /php4/ "/usr/php4/bin/"
Action application/x-httpd-php4 "/php4/php"

Czy to ma prawo działać?

EDIT: Serwer w najlepszym wypadku wywala błąd 403.

Napisany przez: kenobi13 13.07.2009, 17:30:30

Witam, czy da się jakoś zrobić tak, żeby dla wszystkich plików w folderze TribalWars ładował się PHP4, a dla pozostałych php5?

Napisany przez: erix 13.07.2009, 18:09:22

Da się.

Odpowiedziałem na pytanie.

Napisany przez: kenobi13 13.07.2009, 18:31:59

A możesz jeszcze powiedzieć jak?

Napisany przez: erix 13.07.2009, 21:01:57

Zależy od konfiguracji obu wersji PHP.

Na pewno trzeba przestawić via htaccess, ale co: patrz wyżej.

Napisany przez: kenobi13 14.07.2009, 09:24:51

tylko, że ja mam Linuxa

Napisany przez: nexis 14.07.2009, 12:12:06

Cytat(kenobi13 @ 14.07.2009, 10:24:51 ) *
tylko, że ja mam Linuxa

A pod Linuxem nie ma htaccess? Jest.

Napisany przez: kenobi13 15.07.2009, 08:34:44

a gdzie jest?

Napisany przez: Zyx 15.07.2009, 08:49:09

Weź sobie zainstaluj Lighttpd, PHP uruchom w trybie FastCGI i wtedy możesz przypisać poszczególne instancje do odpowiednich domen. Ja w ten sposób mam jednocześnie uruchomione na jednym serwerze PHP 5.2, 5.3 oraz 6.0-dev, a wybieram sobie, wpisując po prostu odpowiedni adres URL w przeglądarce, np. projekt.php52.lh - dany projekt odpala się w PHP 5.2, projekt.php53.lh - ten sam projekt odpala się w PHP 5.3. Domeny możesz sobie zrobić w /etc/hosts, a podpiąć je za pośrednictwem wirtualnych hostów.

http://wiki.arch-linux.pl/wiki/Lighttpd#PHP - tutaj masz przykład konfiguracji Lighttpd, FastCGI i rozmnożenia PHP do dwóch różnych instancji.

Napisany przez: kenobi13 19.07.2009, 09:06:43

A czy da się uruchomić dwa razy apache na różnych portach?

Napisany przez: Zyx 19.07.2009, 12:06:36

Powinno się dać, przynajmniej nie widzę żadnego technicznego powodu, by takie coś było niemożliwe. Skoro da się uruchomić dwa różne serwery WWW na różnych portach (np. jak pisałem w Javie servlety, to uruchamiane były niezależnie od Lighttpd), to dwa takie same też nie powinny sprawić problemów ze swojej własnej strony. W Linuksie musisz jedynie uważać na skrypty startowe demonów - będziesz je musiał rozmnożyć i popatrzeć, czy prawidłowo rozróżniają oba uruchomione Apache, gdyż inaczej będziesz mieć problemy z ich uruchamianiem i zamykaniem. Chodzi głównie o zapisywanie numerów PID, a w przypadku Apache'a - wykorzystanie apachectl oraz jednocześnie jego zachowanie w tym samym przypadku. U mnie (Arch Linux) wykorzystywany był programik "pidof" który pobierał PID na podstawie nazwy binarki i to rodziło duże problemy, bo obie uruchomione wersje miały tę samą nazwę pliku wykonywalnego. Dodam, że nawet dowiązanie symboliczne nie pomogło i musiałem zmienić procedurę tak, by analizowała grepem i awk-iem wyciąg z komendy ps. Co i jak, też masz podane w tych linkach z mojego poprzedniego posta, tylko musisz to sobie przerobić na Apache'a.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)