Gentoo Logo

Aktualizowanie PHP

Spis treści:

1.  Wprowadzenie

W przeszłości wielokrotnie proszono nas o oznaczenie PHP5 jako stabilne w drzewie Portage. Problemem nie było samo PHP5, powodem była duża ilość pakietów, rozszerzeń i programów, które z PHP5 nie chciały działać, na co nie mogliśmy nic poradzić. PHP5 nie jest w 100% kompatybilne z PHP4 i nie każdy program w PHP4 może zostać przeniesiony i uruchomiony w PHP5. Wielu użytkowników będzie zmuszonych do korzystania z PHP4 jeszcze przez długi czas.

Sposobem na rozwiązanie problemu jest połączenie PHP4 i PHP5 w jedno zróżnicowane środowisko. Nie byłoby to jednak możliwe przy obecnym rozmieszczeniu pakietów oraz eklasie PHP, z tego powodu włożono wiele pracy by ebuildy i eklasy odpowiednio podzielić.

Dokument ten szczegółowo omawia proces aktualizacji.

Uwaga: Nowe pakiety PHP wymagają Apache, należy zapoznać się z tekstem Aktualizowanie Apache jeżeli jeszcze nie zostało zaktualizowane.

2.  Zmiany

Podstawowe zbiorcze pakiety PHP

Wszystkie ebuildy PHP (dev-php/php, dev-php/php-cgi i dev-php/mod_php) zostały połączone w jeden ebuild: dev-lang/php.

Aby wybrać SAPI, używamy tych flag USE:

  • cgi - instaluje /usr/bin/php-cgi
  • cli - instaluje /usr/bin/php
  • apache - instaluje mod_php dla Apache 1.3 (nowy projekt)
  • apache2 - instaluje mod_php dla Apache 2.0 (nowy projekt)

Można używać zamiennie tych flag USE, z tym wyjątkiem, że nie można mieć obu apache oraz apache2 jednocześnie.

Dzięki tym ebuildom możemy posiadać jednocześnie zarówno PHP4 jak i PHP5.

Listing 2.1: Instalowanie PHP

(Instaluje najnowszą wersję PHP wraz z modułami CLI oraz Apache2)
# USE="cli apache2" emerge 'dev-lang/php'

(Instaluje jedynie PHP4)
# USE="cli apache2" emerge '=dev-lang/php-4*'

(Instaluje zarówno PHP4 jak i PHP5)
# USE="cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'

Uwaga: Flagi USE nie powinny być używane w ten sposób, na dłuższą metę należy skorzystać z pliku /etc/portage/package.use, omówimy to później.

Nowe kategorie w Portage

Nowe ebuildy PHP przeniesiono z dev-php do dev-lang/php. By umożliwić niezależną instalację pakietów dla PHP4 i PHP5 dodano dwie nowe kategorie w Portage: dev-php4 oraz dev-php5. Kategorie te są używane głównie przez pakiety PECL takie jak: pecl-pdo, pecl-apc, php-java-bridge i xdebug.

Instalowanie pecl-apc:

Listing 2.2: Instalacja rozszerzeń PHP takich jak PECL::APC (przykład)

(Instaluje APC jedynie dla PHP4)
emerge dev-php4/pecl-apc

(Instaluje APC jedynie dla PHP5)
emerge dev-php5/pecl-apc

(Instaluje APC dla PHP4 oraz PHP5)
emerge dev-php4/pecl-apc dev-php5/pecl-apc

Nowe katalogi

  • Zawartość nowych ebuildów będzie się znajdować w /usr/lib/php4 i /usr/lib/php5 (moduły Apache umieszczone będą w odpowiednim dla nich miejscu).
  • Pakiety PEAR będą położone w /usr/share/php (wcześniej /usr/lib/php).
  • Pakietów PECL nie konfigurujemy już przez dodanie opcji do pliku php.ini, a przez skopiowanie pliku [PACKAGE].ini do katalogu /etc/php/[SAPI]/ext.

Tworzenie dowiązań symbolicznych binariów PHP

W przypadku gdy instalowane są obie wersje PHP:

Listing 2.3: Instalowanie PHP4 i PHP5

# USE="cgi cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'

Ebuildy utworzą dowiązania symboliczne w /usr/bin dla ostatniej zainstalowanej wersji PHP. W tym przypadku PHP5, biorąc pod uwagę, że zostało zainstalowane po PHP4. Jeśli chcemy by /usr/bin/php lub /usr/bin/php-cgi było miejscem położenia dla PHP4 lub też jedno dla PHP4, inne dla PHP5 itp. możemy posłużyć się narzędziem php-select z pakietu app-admin/php-toolkit, które w znacznym stopniu ułatwia tworzenie dowiązań symbolicznych dla binariów.

3.  Aktualizowanie poleceń

Szukanie pakietów wymagających uaktualnienia

W pierwszej kolejności należy ustalić, które dodatkowe pakiety wymagają aktualizacji. W tym celu można wykorzystać equery, który jest częścią pakietu app-portage/gentoolkit:

Listing 3.1: Lista pakietów zainstalowanych w dev-php

$ equery list 'dev-php/'
[ Searching for all packages in 'dev-php' among: ]
 * installed packages
[I--] [  ] dev-php/php-4.4.0 (0)
[I--] [  ] dev-php/mod_php-4.4.0 (1)
[I--] [  ] dev-php/smarty-2.6.10 (0)
[I--] [  ] dev-php/PEAR-PEAR-1.3.5-r1 (0)
[I--] [  ] dev-php/PEAR-Mail-1.1.6 (0)
[I--] [  ] dev-php/PEAR-MDB-1.3.0 (0)
[I--] [  ] dev-php/PECL-apc-3.0.6 (0)
[I--] [  ] dev-php/PECL-imagick-0.9.11 (0)
[I--] [  ] dev-php/xdebug-2.0.0_beta3 (0)

Ważne: Pakiety które zainstalowaliśmy mogą się znacznie różnić od tej listy, dlatego należy się upewnić, że jest ona właściwa dla naszego systemu. Zachowujemy wygenerowaną tak jak w powyższym przykładzie listę, by mieć pewność, że zostaną zaktualizowane wszystkie pakiety.

Uwaga: Nie dotyczy to większości programów z kategorii webapp, ponieważ mają osobną eklasę, która dba o to by były instalowane poprawnie. Warto jednak sprawdzić czy nie ma jej nowej wersji.

Rozszerzenia PHP, takie jak:

  • PECL-apc
  • PECL-imagick
  • xdebug

Podzielono na 2 osobne kategorie dev-php4 oraz dev-php5, by umożliwić ich niezależne użycie dla obu wersji PHP. Dodatkowo większość z nich ma zmienione nazwy:

Przykłady nowych katalogów i ich nowego nazewnictwa:

Rozszerzenie PHP stare nowe PHP4 nowe PHP5
APC dev-php/PECL-apc dev-php4/pecl-apc dev-php5/pecl-apc
Imagick dev-php/PECL-imagick dev-php4/pecl-imagick dev-php5/pecl-imagick
Xdebug dev-php/xdebug dev-php4/xdebug dev-php5/xdebug

Uwaga: Zanim zainstalujemy ponownie te rozszerzenia, należy przejrzeć /usr/portage, by zobaczyć jak zostały nazwane poszczególne pakiety.

Usuwanie starych pakietów

Wykonaliśmy wiele zmian w działaniu PHP w obrębie Gentoo. Zanim przystąpimy do instalacji nowych pakietów, wymagane jest całkowite usunięcie starych pakietów:

Listing 3.2: Usuwanie starych pakietów (przykład)

(Usuwanie pakietów PHP)
emerge --unmerge php mod_php

(Usuwanie rozszerzeń PHP)
emerge --unmerge PECL-apc PECL-imagick xdebug

(Usuwanie bibliotek/aplikacji PHP)
emerge --unmerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty

Flagi USE

Pewne flagi USE zostały już przez nas dodane, ale warto je przejrzeć i utworzyć odpowiednie wpisy w /etc/portage/package.use (plik należy utworzyć w przypadku gdy nie istnieje).

Uwaga: /etc/portage/package.use ustawi oraz zapisze flagi USE dla PHP bez konieczności globalnych zmian poprzez edycję pliku make.conf.

Ustawiamy flagi USE stosownie do instalacji PHP jaką chcemy otrzymać (zalecane jest ustawienie przynajmniej jednej flagi USE cli):

Listing 3.3: Flagi USE dla dev-lang/php (przykład)

dev-lang/php -* cli apache2 ctype expat fastbuild ftp gd hash iconv memlimit
mysql nls pcre pic pdo reflection session simplexml sockets spl ssl tokenizer
truetype unicode xml xsl zlib

Uwaga: -* wyłączy wszystkie flagi USE (nawet te podstawowe dla PHP jak np. Session-, PCRE-, gd- i MySQL-support!), należy więc sprecyzować każdą flagę USE dla każdego rozszerzenia, którego będziemy używać. Szczegóły znajdują się w tekście Zarządzanie rozszerzeniami. Trzeba również ustawić flagi USE dla domyślnych wartości takich jak pcre jeśli chcemy używać preg_* Functions lub session, jeśli będziemy używać Session Handling Functions.

Jeżeli PHP4 i PHP5 będą instalowane równolegle, możemy użyć osobnych flag USE dla każdej z wersji:

Listing 3.4: Osobne flagi USE dla PHP4 i PHP5 (przykład)

=dev-lang/php-4* -* cli cgi apache2 ctype expat fastbuild force-cgi-redirect
ftp gd iconv ipv6 memlimit mysql nls pcre pic posix session sockets ssl
tokenizer truetype unicode xml xsl zlib
=dev-lang/php-5* -* cli cgi apache2 ctype fastbuild force-cgi-redirect ftp gd
hash iconv ipv6 memlimit mysql nls pcre pic posix pdo reflection session
simplexml soap sockets spl sqlite ssl tokenizer truetype unicode xml xmlreader
xmlwriter xsl zlib

Uwaga: Lista zalecanych flag USE Zalecane flagi USE. Lista flag USE dostępnych dla PHP Tabela flag USE znajdująca się na wiki.

Instalowanie PHP

Teraz należy wybrać instalację, którą chcemy posiadać. Możemy wybrać tylko PHP4 lub PHP5 albo oba równolegle. Samo PHP4 instalujemy poprzez zemergowanie =dev-lang/php-4*, by zainstalować PHP5 (najnowszą wersję) użyjemy dev-lang/php, natomiast obie wersje równolegle instalujemy przez =dev-lang/php-4* oraz =dev-lang/php-5*.

Sprawdzanie ustawień flag USE:

Listing 3.5: Sprawdzenie flag USE (przykład)

(Sprawdza pakiet PHP4)
emerge --pretend --verbose '=dev-lang/php-4*'

(Sprawdza pakiet PHP5)
emerge --pretend --verbose '=dev-lang/php-5*'

(Sprawdza rozszerzenia PHP dla PHP4)
emerge --pretend --verbose dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug

(Sprawdza rozszerzenia PHP dla PHP5)
emerge --pretend --verbose dev-php5/pecl-apc dev-php5/pecl-imagick

(Sprawdza biblioteki/aplikacje PHP)
emerge --pretend --verbose PEAR-PEAR PEAR-Mail PEAR-MDB smarty

Jeśli wszystko jest w porządku, instalujemy PHP:

Listing 3.6: Instalowanie nowych pakietów (przykład)

(Instalowanie pakietu PHP4)
emerge '=dev-lang/php-4*'

(Instalowanie pakietu PHP5)
emerge '=dev-lang/php-5*'

(Instalowanie rozszerzenia PHP dla PHP4)
emerge dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug

(Instalowanie rozszerzenia PHP dla PHP5)
emerge dev-php5/pecl-apc dev-php5/pecl-imagick

(Instalowanie bibliotek/aplikacji PHP)
emerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty

PHP4 i PHP5 równolegle: wybór binariów do użycia z cli/cgi

Po zemergowaniu będziemy mieli binaria dostępne dla cli i/lub cgi w /usr/lib/php4/bin i/lub /usr/lib/php5/bin. Jeśli zainstalowaliśmy oba pakiety, czyli PHP4 i PHP5, Portage nie zdecyduje za nas,które z nich powinno być użyte jako domyślne i utworzy dowiązanie do najnowszej zainstalowanej przez nas wersji PHP w /usr/bin. Z tego wynika, że jeśli jako ostatnie instalowaliśmy PHP5 to /usr/bin/php będzie dowiązane do /usr/lib/php5/bin/php. Tak więc binaria cli i/lub cgi, tak jak php-devel (odpowiedzialne za utworzenie rozszerzeń PHP przez phpize i php-config) muszą być dowiązane (do /usr/bin), można to prosto wykonać poprzez użycie php-select, który jest częścią app-admin/php-toolkit.

Uwaga: Pakiet dev-lang/php jest zależny od app-admin/php-toolkit tak więc php-select powinno być automatycznie dostępne po zainstalowaniu nowych pakietów PHP.

Zakładając, ze zainstalowaliśmy =dev-lang/php-4* oraz =dev-lang/php-5*, wykonujemy polecenie php-select by pokazać obecnie wybrane wersje PHP:

Listing 3.7: Pokazuje obecnie wybrane wersje PHP

(Dla cli)
php-select php

(Dla cgi)
php-select php-cgi

(Dla phpize, php-config)
php-select php-devel

Powinniśmy zobaczyć coś w rodzaju:

Listing 3.8: Przykładowy listing programu php-select

# php-select php
/usr/bin/php is set to /usr/lib/php5/bin/php

Oznacza to, że domyślna ścieżka binariów cli /usr/bin/php jest dowiązana do biblioteki PHP5 /usr/lib/php5/bin/php. Tak więc skrypty PHP korzystające z /usr/bin/php będą wykonane przez PHP5.

Użycie php-select do zmiany domyślnych wersji PHP

Jeśli domyślne ustawienia wersji z poprzedniego rozdziału nie są satysfakcjonujące, można ponownie użyć php-select by wybrać pożądane wersje:

Listing 3.9: Wybór interesującej nas wersji

(Dla cli)
php-select php php4

(Dla cgi)
php-select php-cgi php5

(Dla phpize, php-config)
php-select php-devel php5

Uwaga: Wpisanie php-select -h pokaże nam jak można jeszcze wykorzystać php-select.

Sprawdzanie dowiązań symbolicznych:

Listing 3.10: Sprawdza dowiązania

# stat /usr/bin/php /usr/bin/php-cgi /usr/bin/phpize /usr/bin/php-config | grep File
 File: `/usr/bin/php' -> `/usr/lib/php4/bin/php'
 File: `/usr/bin/php-cgi' -> `/usr/lib/php5/bin/php-cgi'
 File: `/usr/bin/phpize' -> `/usr/lib/php5/bin/phpize'
 File: `/usr/bin/php-config' -> `/usr/lib/php5/bin/php-config'

Uwaga: Zauważmy, że php-select zmienia jedynie domyślne wersje. Jeśli zainstalowaliśmy PHP4 i PHP5 cgi/cli możemy zawsze użyć bezpośredniej ścieżki jak /usr/lib/php4/bin/php i/usr/lib/php5/bin/php by uruchomić skrytp PHP z określonymi wersjami. Można również użyć PHP4 i PHP5 cgi w tym samym przykładzie/przypadku Apache, ale nie możemy korzystać z dwóch różnych modułów PHP Apache w jednym przypadku/przykładzie. Więcej informacji znajduje się w Przewodniku konfiguracji PHP4 i PHP5.

4.  Przenoszenie plików konfiguracyjnych

Pliki konfiguracyjne pakietu PHP znajdują się w katalogu /etc/php, który zawiera jeden podkatalog dla każdego SAPI dla każdej wersji PHP:

Listing 4.1: Listuje katalogi (z) konfiguracji/ą PHP

$ ls -1 /etc/php
apache2-php4
apache2-php5
cli-php4
cli-php5

Każdy podkatalog zawiera własne php.ini, tak jak stare pakiety.

Zmiany w php.ini

Zalecane jest użycie etc-update lub dispatch-conf i przejrzenie różnic pomiędzy starymi a nowymi ustawieniami w php.ini. Dwie opcje/dyrektywy, które bezwzględnie powinny być sprawdzone to include_path oraz extension_dir. Tutaj ostrożnie, extension_dir różni się pomiędzy poszczególnymi wersjami PHP (również pomiędzy 5.0, i 5.1!).

Przykład dla 5.1 w /etc/php/apache2-php5/php.ini i /etc/php/cli-php5/php.ini:

Listing 4.2: Stare ustawienia w php.ini

include_path = ".:/usr/lib/php"
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20050617/"

Listing 4.3: Nowe ustawienia w php.ini

include_path = ".:/usr/share/php"
extension_dir = "/usr/lib/php5/lib/php/extensions/no-debug-non-zts-20050617/"

Ostrzeżenie: Należy użyć etc-update lub dispatch-conf by mieć pewność co do poprawnych ustawień dla każdego z plików.

Zmiany w konfiguracji rozszerzeń PHP

Nowy pakiet PHP nie przechowuje już konfiguracji z zewnętrznych (dzielonych) rozszerzeń PHP w php.ini. Dyrektywy będą przechowywane w specyficznych dla każdego rozszerzenia pliku konfiguracyjnym ulokowanym w /etc/php/*/ext. W celu włączenia wspólnych rozszerzeń, używane są dowiązania z /etc/php/*/ext-active. Jeśli chcemy włączyć rozszerzenie, tworzymy dowiązanie symboliczne w /etc/php/*/ext-active odpowiadające plikowi [EXTENSION].ini w /etc/php/*/ext/. Jeśli chcemy usunąć/wyłączyć rozszerzenie, usuwamy dowiązanie.

Jeśli wcześniej było zainstalowane dev-php/PECL-apc to konfiguracja dla APC znajduje się w php.ini. Jeśli pakiet dev-php5/pecl-apc został przez nas przeinstalowany to domyślna konfiguracja APC będzie zapisana do /etc/php/*5/ext/apc.ini.

Należy więc przenieść konfigurację APC z /etc/php/*5/php.ini do /etc/php/*5/ext/apc.ini i utworzyć dowiązanie z /etc/php/*5/ext-active/apc.ini do /etc/php/*5/ext/apc.ini .

Uwaga: Jeśli instalujemy PHP jako moduł Apache, należy ponownie uruchomić Apache po zainstalowaniu i skonfigurowaniu.

5.  Konfigurowanie Apache do pracy z PHP4 i PHP5

Aby skłonić Apache do ładowania modułu (mod_php) PHP4 lub PHP5, wystarczy dodać odpowiednio -D PHP4 lub -D PHP5 do zmiennej -D PHP4 respectively -D PHP5 to APACHE2_OPTS w pliku /etc/conf.d/apache2.

Listing 5.1: Konfiguranie ładowania mod_php w Apache

(dla PHP4)
APACHE2_OPTS="-D PHP4"

(dla PHP5)
APACHE2_OPTS="-D PHP5"

Istnieje wiele sposobów na to by Apache działał z dwiema równoległymi wersjami PHP. Najłatwiej jest użyć PHP4 i PHP5 jako binarii cgi, albo cgi PHP4 i modułu PHP5 (lub na odwrót). Nie jest możliwe jednoczesne korzystanie z modułów PHP4 i PHP5 w jednym procesie Apache.

Stworzyliśmy przewodnik konfiguracji PHP4 i PHP5, które przedstawia część z możliwych rozwiązań Przewodnik konfiguracji PHP4 i PHP5.

6.  Pomoc

W razie jakichkolwiek problemów związanych z nowym pakietem Gentoo PHP, oto miejsca gdzie można znaleźć pomoc:

  • Częste pytania związane z PHP w Gentoo
  • Strona dewoloperów PHP
  • Kanał #gentoo-php w sieci irc.freenode.net. Miejsce spotkań autorów obsługi i użytkowników PHP w Gentoo.
  • Forum Gentoo popularne miejsce do zadawania pytań. Wielu użytkowników korzysta z forum, jest to więc świetne miejsce do uzyskania w miare szybkiej pomocy.

Szczegółowe zastosowanie nowych pakietów znajdziemy na postach Stuarta na listę gentoo-dev i w blogu Stuarta.

Na Development-Page znajdziemy dokumentację i najnowsze ebuildy, które będą przeniesione do oficjalnego drzewa portage w późniejszym czasie.



Drukuj

Zaktualizowano 11 sierpnia 2007

Podsumowanie: Dokument opisuje procedurę postępowania, dzięki której użytkownicy mogą bezpiecznie zaktualizować zainstalowane pakiety PHP.

Andreas Korthaus
Autor

Adrian Spaleniak
Tłumaczenie

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.