Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Uruchamianie PHP 4 i PHP 5 na jednym serwerze
Forum PHP.pl > Forum > Serwery WWW > Apache
DeyV
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 wampserver
(składający się domyślnie z Apache 1.3.31, php 5.0.0 and MySQL 4.0.18.) po zainstalowaniu dodatku PHP4 ADD-ON
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
Jojo
Ciekawa koncepcja z tym serverem...
Ja natomiast zastosowałem się do porad FiDO z tego 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ń.
FiDO
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=78...ndpost&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.
magaf
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
FiDO
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.
anas
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 ciekawy artykuł 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
orson
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
FiDO
Musisz dodac ScriptAlias'a

Kod
ScriptAlias /php5/ c:/work/php5/
Action application/x-httpd5-php /php5/php-cgi.exe
orson
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
FiDO
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
matid
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>
orson
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
FiDO
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.
orson
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
FiDO
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 ?
orson
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
Fo
@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
anas
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
Fo
@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
naox
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?
eai
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)
sobstel
dla użytkowników Gentoo polecam http://www.gentoo.org/proj/en/php/php4-php...nfiguration.xml
FiDO
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.
slash12345
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.
kenobi13
Witam, czy da się jakoś zrobić tak, żeby dla wszystkich plików w folderze TribalWars ładował się PHP4, a dla pozostałych php5?
erix
Da się.

Odpowiedziałem na pytanie.
kenobi13
A możesz jeszcze powiedzieć jak?
erix
Zależy od konfiguracji obu wersji PHP.

Na pewno trzeba przestawić via htaccess, ale co: patrz wyżej.
kenobi13
tylko, że ja mam Linuxa
nexis
Cytat(kenobi13 @ 14.07.2009, 10:24:51 ) *
tylko, że ja mam Linuxa

A pod Linuxem nie ma htaccess? Jest.
kenobi13
a gdzie jest?
Zyx
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.
kenobi13
A czy da się uruchomić dwa razy apache na różnych portach?
Zyx
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.
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-2019 Invision Power Services, Inc.