PHP 4 i PHP 5 na jednym serwerze Apache (PHP 5 jako CGI, z mysql)

16-Paź-2011

Nie samym Microsoftem programista żyje. Na Linuxie trzeba było zainstalować PHP 5, tak by się zgrał z Apache i MySql. Cały problem polegał jednak na tym, że na serwerze Apache był skonfigurowany z PHP 4 uruchamianym jako moduł. Na dodatek PHP 4 nie mogło być zamienione na PHP 5, bo były pewne strony, które wymagały starszej wersji PHP. No więc po kolei:

INSTALACJA PHP 5

  1. Najpierw ściągnąłem php w wersji źródłowej
  2. Rozpakowałem go
  3. Pora na konfigurację niezbędną do instalacji:
  4. Ponieważ PHP 4 współpracuje już jako moduł Apache, to należy wskazać, że teraz PHP ma pracować jako CGI. Ponieważ chciałem, aby php współpracowało z MySQL, a PHP 5 nie zawiera już w sobie bibliotek mysql, trzeba było przekazać opcjami informację o tym, gdzie znajduje się mysql:
    ./configure –prefix=/usr/local/php5 –exec-prefix=/usr/local/php5 –program-suffix=5 –enable-force-cgi-redirect –enable-discard-path –with-mysql=/usr/local/mysql
  5. Potem pozostaje skompilować php 5:
    make
  6. i zainstalować
    make install
  7. W  moim przypadku PHP trafia do katalogu /usr/local/php5. Php potrzebuje jeszcze pliku php.ini. Z katalogu z rozpakowanymi źródłami można przekopiować plik php.ini-production do katalogu /usr/local/php5/lib/ z nazwą php.ini. To jest domyślne miejsce, gdzie php szuka pliku konfiguracyjnego.
  8. Z PHP to by było na tyle

KONFIGURACJA APACHE

  1. Apache ma plik konfiguracyjny httpd.conf. Znajdziesz go tam, gdzie zainstalowałeś Apache
  2. Należy wskazać, że serwer może uruchamiać skrypty z określonej lokalizacji, w której znajduje się nowe PHP. W tym celu w pliku dospisałem linijkę:
     ScriptAlias /local-bin/ „/usr/local/php5/bin/”
  3. Ponieważ php5 ma się uruchamiać tylko w niektórych stronach, należy jakoś wskazać, czy uruchamiać ma się php4, czy php5. Można np wykorzystać do tego rozszerzenie plików. U mnie jednak obie wersje używają php, więc konfiguracji trzeba było dokonać na poziomie konfiguracji katalogu, dlatego:
  4. W katalogu głównym stron www założyłem plik .htaccess i wpisałem do niego następujące linijki:
    AddHandler  application/x-httpd-php5 .php
    Action     application/x-httpd-php5 /local-bin/php-cgi5
  5. Pierwsza z nich mówi, że jeżeli serwer otrzyma żądanie dotyczące pliku z rozszerzeniem php, to powienien potraktować jego zawartość jako application/x-httpd-php5 (przy czym jest to tylko wymyślona umowna nazwa)
  6. Druga linijka mówi, że obsługując żądanie application/x-httpd-php5 należy uruchomić program CGI /local-bin/php-cgi5.
  7. Zapis ScriptAlias (z kroku 2) tłumaczy z kolei, że /local-bin/ należy zamienić na /usr/local/php5/bin/
  8. W efekcie, kiedy użytkownik poprosi o plik .php zostanie uruchomiony program /usr/local/php5/bin/php-cgi5 i wykona ten skrypt.

Po zmianach w httpd.conf należy restatować Apache np wykonując komendę

apachectl graceful

Zmiany w .htaccess nie wymagają restartu serwera, są obserwowane przez serwer na żywo.

PRZYDATNE

W httpd.conf można kazać logować informacje o błędach wykorzystując dyrektywę ErrorLog . Można więc w definicji VirtualHost dopisać linijkę

 ErrorLog /tmp/error.log

a wszelkie błędy będą „na żywo dopisywane do tego pliku. Aby zmiany te widzieć od razu na ekranie można w osobnym okienku wykonać polecenie

tail -f /tmp/error.log

U mnie bardzo się to przydało, bo np. kiedy w .htaccess umieszczałem dyrektywę <Directory>… otrzymywałem komunikat:

.htaccess: <Directory not allowed here

Podobnie gdy nie w tym pliku umieściłem ScriptAlias komunikat mnie o tym poinformował:

.htaccess: ScriptAlias not allowed here

Chociaż łatwo mi to nie przyszło, dawno już przy tym nie dłubałem, to jednak kiedy wszystko zaczyna działać, to daje to duże zadowolenie i taki delikatny smaczek „nie wyklikiwanych rozwiązań”. Ach… kiedyś to były czasy, wszystko w shellu, może z czasem w… PowerShellu:)

Dodaj komentarz:

Autor: Rafał Kraik