Posiadając serwer hostingowy obsługujący różnorakie projekty zachodzi czasem potrzeba użycia starszej, bądź nowszej wersji PHP, niż aktualnie zainstalowana. Panel ISPConfig ułatwia zarządzanie wersjami dla konkretnych projektów, lecz aby zacząć korzystać z takiej możliwości trzeba wpierw zainstalować dodatkową wersje PHP. Takim problemem zajmę się tym razem w oparciu o materiał z HowToForge.com. Poniższy artykuł będzie praktycnzie tłumaczeniem wersji oryginalnej wraz z uzupełnieniem o napotkane w czasie kolejnych kroków problemy jakie przytrafiły się w moim konkretnym przypadku.
Słowem wstępu należy nadmienić, iż wersje PHP występują w różnych mutacjach. Skupimy się na PHP-FPM, oraz FastCGI. Osobiście posiadam serwer Apache i obie mutacje działają na nim bez problemów, jednak jeżeli ktoś wybrał działanie w oparciu o NGINX to dla niego FastCGI nie jest wskazane i działać nie będzie.
Artykuł przedstawia dwie drogi instalacji. Pierwszą dla PHP-FPM, oraz drugą oddzielnie dla FastCGI. Możliwa jest kompilacja dwóch mutacji PHP za jednym zamachem jak podaje autor oryginału, choć w moim przypadku coś poszło źle (gdzieś przekombinowałem ;) ) dlatego wolę opcje małych kroczków i budowania kolejnych wersji osobno.
WAŻNE!!: Pamiętać należy, aby do odpowiedniej mutacji używać odpowiednich zmiennych. Tak więc przy konfiguracji kompilacji PHP-FPM dodajemy na końcu --enable-fpm, oraz używamy właściwej dla danej mutacji ścieżki do plików źródłowych w postaci /opt/php-5.3.22. Odpowiednio dla FastCGI do konfiguracji dodajemy wpis --enable-cgi, oraz korzystamy ze ścieżki w postaci /opt/phpfcgi-5.3.22. Oczywiście powyższe ścieżki dostępu są właściwe dla tego konkretnego przykładu i jeżeli pliki źródłowe zapisaliśmy w innej lokalizacji to też należy konsekwentnie z danej lokalizacji korzystać.
Ściągamy i wypakowujemy pliki źródłowe PHP 5.3.22
Wersje starsze lub nowsze niż 5.3.22 znajdziemy w Muzeum PHP
Instalujemy pakiety dodatkowe wymagane do prawidłowej instalacji.
Poniższa komenda konieczna jest w przypadku gdy kompilujemy PHP wraz z parametrem --with-imap.
W przypadku braku powyższej komendy ./configure zwróci następujący błąd:
Konfigurujemy PHP 5.3.22 przy pomocy polecenia ./configure. Dodatkowe parametry możemy ustawić zgodnie z własnymi preferencjami. Szczegóły uzyskamy wpisując następującą komendę:
Należy pamiętać, iż korzystanie z niektórych parametrów może wiązać się z koniecznością instalacji dodatkowych bibliotek, lub też proces kompilacji nie powiedzie się.
Dla naszych potrzeb odpowiednia będzie następująca komenda i parametry:
Ostatni parametr --enable-fpm informuje, iż budowana wersja PHP będzie współpracowała z PHP-FPM.
W miejscu tym pojawia się mały problem. Konfiguracja zostaje przerwana i zwracany jest błąd:
Dokładnie chodzi o fragment:
W pierwszej kolejności zasugerujmy się podpowiedzią i zmodyfikujmy konfigurację o parametr --with-xpm-dir=/opt/php-5.3.22 (dla naszego przykładu). Uruchamiamy ponownie ./configure z nowymi parametrami i czekamy. W moim przypadku niestety problem ponownie wystąpił w identycznej formie. Na myśl przychodzi brak jakiegoś pakietu i takie też rozwiązanie sugerują w polskim internecie. Sprawdzić nie zaszkodzi.
Niestety okazało się, iż pakiet istnieje w systemie i jest zainstalowany prawidłowo.
Po dłuższym grzebaniu doszukałem się wskazówki na blogu Daniela Stavrovskiego który to stwierdził, iż nawet jeśli mamy zainstalowany pakiet libfreetype6-dev, oraz wykonaliśmy poprawki w konfiguracji, a błąd nadal występuje to rozwiązaniem jest utworzenie dowiązania symbolicznego w odpowiedniej lokalizacji, bo system choć wszystko co potrzebuje posiada, to szuka w złym miejscu.
I to była porada za 100 punktów, gdyż wszystko poszło gładko i zakończyło się sukcesem. Danielowi wielkie dzięki, natomiast wyszperane w sieci inne warianty błędów umieszczam dla potomnych w materiale Typowe błędy kompilacji wraz z rozwiązaniami.
Kompilujemy
Kopiujemy php.ini, oraz php-fpm.conf do właściwych lokalizacji.
Otwieramy w celu edycji plik /opt/php-5.3.22/etc/php-fpm.conf, a następnie dostosowujemy go do naszych potrzeb.
W linii listen należy wpisać nieużywany port np. 8999, gdyż port 9000 zapewne jest używany przez domyślną wersję PHP-FPM. Na końcu pliku dodajemy również linię w postaci include=/opt/php-5.3.22/etc/pool.d/*.conf. Całość powinna wyglądać mniej więcej jak poniżej.
Tworzymy katalog pool.d dla PHP-FPM
Następnie tworzymy skrypt inicjujący dla PHP-FPM
Wyglądać powinien mniej więcej tak jak poniżej
Nadajemy skryptowi prawa dostępu, oraz tworzymy wpis autostartu:
Na zakończenie uruchamiamy PHP-FPM
Tak długo jak nie będzie katalogu pool /opt/php-5.3.22/etc/pool.d na ekranie widoczne będzie ostrzeżenie, które można zignorować
HowToForge - How To Use Multiple PHP Versions (PHP-FPM & FastCGI) With ISPConfig 3 (Ubuntu 12.10)
Daniel Stavrovski Blog - Build and install PHP 5.3.29 from source on an Ubuntu 14.04 LTS server
CRYBIT - 20+ common PHP compilation errors and fix – Unix