Gentoo Logo

Actualizarea PHP

Conţinut:

1.  Introducere

În trecut au existat multe cereri de ce PHP5 din portage nu este marcat ca stabil, încă. Problema nu este însuşi pachetul PHP5, principalul motiv pentru care PHP5 nu a fost marcat, încă, stabil este că există multe aplicaţii, extensii PHP şi pachete din portage care nu funcţionează cu PHP5 şi nu se poate face nimic în acest sens. PHP5 nu este 100% compatibil cu PHP4 şi nu orice aplicaţie PHP4 poate/va fi portat pentru a rula pe PHP5. Mulţi utilizatori vor avea nevoie de suport PHP4 pentru mult timp.

Soluţia pentru rezolvarea problemelor este să fie oferit un mediu mixt PHP4 / PHP5 pe aceeaşi maşină în acelaşi timp. Însă, acest lucru nu ar fi fost posibil cu dispunerea curentă a pachetelor şi eclaselor PHP, deci nu este nevoie să fie depus prea mult efort în noua dispunere, noile eclase şi noile ebuild-uri.

Acest document detaliază modalitatea de a actualiza fără a afecta negativ sistemul dvs.

Notă: Noile pachete PHP necesită noua dispunere a Apache, deco consultaţi documentul despre Actualizarea Apache, dacă nu l-aţi actualizat încă.

2.  Modificări

Pachetele de Bază PHP Consolidate

Toate ebuild-urile PHP dev-php/php, dev-php/php-cgi şi dev-php/mod_php au fost integrate într-un singur ebuild: dev-lang/php.

Pentru a alege interfaţa server (SAPI) dorită, utilizaţi următorii indicatori USE:

  • cgi - compilează şi instalează /usr/bin/php-cgi
  • cli - compilează şi instalează /usr/bin/php
  • apache - compilează şi instalează mod_php pentru Apache 1.3 (noua dispunere)
  • apache2 - compilează şi instalează mod_php pentru Apache 2.0 (noua dispunere)

Puteţi amesteca şi potrivi oricare dintre aceşti indicatori; cu excepţia faptului că nu puteţi avea şi apache şi apache2 activate.

Cel mai important lucru despre aceste ebuild-uri este că puteţi avea atât PHP4 cât şi PHP5 instalate în acelaşi timp:

Cod 2.1: instalarea PHP

(instalaţi ultima versiune de PHP cu CLI şi modul Apache2)
USE="cli apache2" emerge 'dev-lang/php'

(instalaţi doar PHP4)
USE="cli apache2" emerge '=dev-lang/php-4*'

(instalaţi atât PHP4 cât şi PHP5)
USE="cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'

Notă: Indicatorii USE nu ar trebui să fie setaţi în acest mod, vă rugăm utilizaţi /etc/portage/package.use aşa cum este descris ulterior.

Noile Categorii de Pachete

Noile ebuild-uri PHP au fost mutate din dev-php în dev-lang/php. Pentru a face posibilă instalarea pachetelor independent pentru PHP4 şi PHP5, două categorii noi în portage au fost create: dev-php4 şi dev-php5. Aceste categorii sunt utilizate în special de pachetele PECL, ca pecl-pdo, pecl-apc, php-java-bridge sau xdebug.

Pentru a instala pecl-apc:

Cod 2.2: instalarea extensiilor PHP, ca PECL::APC (examplu)

(instalare APC doar pentru PHP4)
emerge dev-php4/pecl-apc

(instalare APC doar pentru PHP5)
emerge dev-php5/pecl-apc

(instalare APC atât pentru PHP4, cât şi pentru PHP5)
emerge dev-php4/pecl-apc dev-php5/pecl-apc

Directoare Noi

  • Aceste noi ebuild-uri îşi instalează conţinutul în /usr/lib/php4 şi /usr/lib/php5 (modulele Apache sunt instalate în locaţia corectă pentru Apache).
  • Pachetele PEAR şi alte biblioteci PHP sunt instalate în /usr/share/php (întainte erau instalate în /usr/lib/php)
  • Pachetele PECL nu vor mai adăuga directive de configurare prin adăugarea acestora în fişierul de configurare php.ini, dar vor adăuga un fişier [PACHET].ini în directorul /etc/php/[SAPI]/ext.

Legăturile simbolice ale binarelor PHP

Pentru a instala mai mult de o versiune de PHP, spre ex.:

Cod 2.3: emerge PHP4 şi PHP5

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

Ebuild-urile vor crea legături simbolice în /usr/bin pentru ultima versiune de PHP instalată, în acest caz PHP5, deoarece a fost instalat după PHP4. Dacă doriţi ca /usr/bin/php sau /usr/bin/php-cgi să indice către PHP4, sau unul către PHP4 şi celălalt către PHP5, etc., puteţi utiliza utilitarul php-select din app-admin/php-toolkit. php-select facilitează crearea legăturilor simbolice către binarele corespunzătoare.

3.  Instrucţiuni de Actualizare

Găsirea pachetelor de actualizat

Mai întâi trebuie să găsiţi ce pachete adiţionale trebuie să actualizaţi. Puteţi face acest lucru utilizând utilitarul equery, care face parte din pachetul app-portage/gentoolkit:

Cod 3.1: afişarea unei liste cu pachetele instalate în 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)

Important: Pachetele instalate de dvs. pot varia, de aceea asiguraţi-vă că rulaţi această comandă. Ar trebui să stocaţi lista generată mai sus, pentru a vă asigura că veţi actualiza toate pachetele.

Notă: Multe aplicaţii web nu sunt afectate în nici un mod, deoarece majoritatea utilizează eclasa webapp, care le instalează corect. Aţi putea să verificaţi dacă este o nouă revizie.

Extensiile PHP, cum ar fi

  • PECL-apc
  • PECL-imagick
  • xdebug

au fost împărţite în două categorii de pachete separate, dev-php4 şi dev-php5, pentru a face posibilă utilizarea acestora independent, pentru ambele versiuni de PHP. În plus, cele mai multe dintre aceste pachete au fost redenumite:

Exemple pentru redenumirea noilor directoare:

Extensia PHP anterior nou în PHP4 nou în 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

Notă: Înainte de a instala aceste extensii, din nou, va trebui să găsiţi în /usr/portage, modalitatea în care noile pachete au fost redenumite.

Ştergerea pachetelor vechi

Am efectuat multe modificări asupra funcţionării PHP în Gentoo. Va trebui să ştergeţi complet pachetele PHP vechi, înainte de a instala noile pachete:

Cod 3.2: ştergerea pachetelor vechi (examplu)

(dezinstalarea pachetelor PHP)
emerge --unmerge php mod_php

(dezinstalarea extensiilor PHP)
emerge --unmerge PECL-apc PECL-imagick xdebug

(dezinstalarea bibliotecilor/aplicaţiilor PHP)
emerge --unmerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty

Setarea indicatorilor USE

Deoarece am adăugat unii indicatori USE noi, ar trebui să le revizuiţi şi să adăugaţi liniile corespunzătoare în /etc/portage/package.use (trebuie creat dacă nu există).

Notă: /etc/portage/package.use va seta indicatorii USE pentru instalarea dvs. PHP şi le va reţine fără a face modificări masive în fişerul make.conf.

Vă rugăm să setaţi indicatorii USE corespunzător cu ceea ce doriţi să suporte instalarea dvs. PHP (este recomandat să setaţi, cel puţin indicatorul USE cli):

Cod 3.3: Indicatorii USE pentru dev-lang/php (exemplu)

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

Notă: -* va dezactiva toţi indicatorii USE (aceasta va dezactiva chiar funcţionalităţi de bază ca Session-, PCRE-, gd- şi suport MySQL!), deci va trebui să specificaţi fiecare indicator USE pentru orice extensie/funcţionalitate pe care doriţi să o utilizaţi. Consultaţi Organizarea Extensiilor pentru mai multe detalii. Va trebui să setaţi indicatorii USE pentru valorile implicite setate de producători, cum ar fi pcre dacă doriţi să utilizaţi Funcţiile preg_* sau session dacă doriţi să utilizaţi Funcţiile de Manipulare a Sesiunilor.

Dacă doriţi să instalaţi PHP4 şi PHP5 în paralel, puteţi seta indicatori USE diferiţi pentru fiecare versiune:

Cod 3.4: indicatori USE diferiţi pentru PHP4 şi PHP5 (exemplu)

=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

Notă: Pentru o listă de indicatori USE recomandaţi, consultaţi documentul despre Indicatori USE Recomandaţi. Pentru o listă a indicatorilor USE disponibili pentru PHP, consultaţi tabela de indicatori USE din interfaţa wiki a repozitoriului overlay.

Instalarea PHP

Acum, aveţi opţiunea de a instala doar PHP4, doar PHP5 sau ambele în paralel. Pentru a instala doar PHP4, trebuie să instalaţi utilizând emerge pentru =dev-lang/php-4*, pentru a instala PHP5 (ultima versiune), puteţi utiliza dev-lang/php, şi să le instalaţi pe amândouă în paralel, trebuie să utilizaţi emerge pentru =dev-lang/php-4* şi =dev-lang/php-5*.

Verificaţi setărilor indicatorilor USE:

Cod 3.5: verificarea indicatorilor USE (exemplu)

(verificarea pachetului PHP4)
emerge --pretend --verbose '=dev-lang/php-4*'

(verificarea pachetului PHP5)
emerge --pretend --verbose '=dev-lang/php-5*'

(verificarea extensiilor PHP pentru PHP4)
emerge --pretend --verbose dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug

(verificarea extensiilor PHP pentru PHP5)
emerge --pretend --verbose dev-php5/pecl-apc dev-php5/pecl-imagick

(verificarea bibliotecilor/aplicaţiilor PHP)
emerge --pretend --verbose PEAR-PEAR PEAR-Mail PEAR-MDB smarty

Instalaţi PHP dacă totul a decurs în ordine:

Cod 3.6: instalarea noilor pachete (exemplu)

(instalarea pachetului PHP4)
emerge '=dev-lang/php-4*'

(instalarea pachetului PHP5)
emerge '=dev-lang/php-5*'

(instalarea extensiilor PHP pentru PHP4)
emerge dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug

(instalarea extensiilor PHP pentru PHP5)
emerge dev-php5/pecl-apc dev-php5/pecl-imagick

(instalarea bibliotecilor/aplicaţiilor PHP)
emerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty

PHP4 şi PHP5 în paralel: selectarea binarului cli/cgi

După instalare, veţi avea binare pentru cli şi/sau cgi în /usr/lib/php4/bin şi/sau /usr/lib/php5/bin. Dacă aţi instalat, atât PHP4 cât şi PHP5, portage nu poate decide şi întotdeauna va crea legături simbolice pentru ultima versiune de PHP instalată, în /usr/bin. Deci, dacă aţi instalat PHP5 ultima dată, veţi vedea că /usr/bin/php este legat simbolic de /usr/lib/php5/bin/php. Deci, un binar cli şi/sau cgi, ca şi unul php-devel (responsabil pentru compilarea extensiilor PHP utilizând phpize şi php-config) trebuie să fie legat simbolic (în /usr/bin), lucru uşor de făcut utilizând php-select, parte componentă a app-admin/php-toolkit.

Notă: Pachetele dev-lang/php depind de app-admin/php-toolkit, deci php-select ar trebui să fie disponibile automat după instalarea pachetelor noi php.

Presupunând că aţi instalat atât =dev-lang/php-4* cât şi =dev-lang/php-5*, introduceţi următoare php-select pentru a afişa versiunile PHP selectate în mod curent:

Cod 3.7: afişarea versiunilor PHP selectate curent

(pentru cli)
php-select php

(pentru cgi)
php-select php-cgi

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

Ar trebui să vedeţi ceva de genul:

Cod 3.8: exemplu de afişare a php-select

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

Ceea ce înseamnă că calea implictă către binarul cli al PHP /usr/bin/php este legat simbolic de binarul PHP5 /usr/lib/php5/bin/php. Deci, script-urile PHP ce utilizează /usr/bin/php vor fi executate de PHP5.

Utilizarea php-select pentru a modifica versiunile PHP implicite

Dacă nu sunteţi mulţumit cu setarea versiunii implicite gasită în capitolul anterior, puteţi utiliza din nou php-select pentru a selecta versiunea dorită:

Cod 3.9: selectarea versiunilor dorite

(pentru cli)
php-select php php4

(pentru cgi)
php-select php-cgi php5

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

Notă: Vă rugăm să utilizaţi php-select -h pentru a obţine mai multe detalii despre funcţionalităţile php-select.

Verficaţi legăturile:

Cod 3.10: verificarea legăturilor simbolice

 # 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'

Notă: Vă rugăm să notaţi faptul că php-select doar modifică versiunile implicite. Dacă aţi instalat cgi/cli atât pentru PHP4 cât şi pentru PHP5, puteţi întotdeauna utiliza căile directe, cum ar fi /usr/lib/php4/bin/php sau /usr/lib/php5/bin/php pentru a rula un script PHP specific unei versiuni. Puteţi utiliza componentele cgi pentru PHP4 şi PHP5 în aceeaşi instanţă Apache, dar nu puteţi utiliza două module PHP în aceeaşi instanţă Apache, consultaţi Ghidul pentru Configurarea PHP4 şi PHP5 pentru mai multe detalii.

4.  Migrarea fişierelor de configurare

Pachetul PHP din Gentoo îşi stochează configuraţia în /etc/php, ce conţine câte un subdirector pentru fiecare interfaţă de aplicaţie (SAPI) pentru fiecare versiune de PHP:

Cod 4.1: afişarea directoarelor de configurare ale PHP

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

Fiecare subdirector conţine un fişier php.ini propriu, ca pachetele vechi.

Modificări în php.ini

Ar trebui să utilizaţi etc-update sau dispatch-conf şi să analizaţi diferenţele dintre setările noi şi cele vechi din php.ini. Două directive ce trebuie neapărat verificate sunt include_path şi extension_dir. Dar, atenţie aici, extension_dir este diferită între versiunile PHP (de asemenea, şi între 5.0 şi 5.1!).

Exemplu pentru PHP 5.1 în /etc/php/apache2-php5/php.ini şi /etc/php/cli-php5/php.ini:

Cod 4.2: setările vechi din php.ini

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

Cod 4.3: setările noi din php.ini

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

Atenţie: Asiguraţi-vă că utilizaţi etc-update sau dispatch-conf pentru a observa setările corecte pentru fiecare fişier.

Configurarea Extensiilor PHP s-a modificat

Noul pachet PHP nu îşi mai stochează directivele de configurare în extensiile PHP (partajate) din php.ini. Aceste directive vor fi stocate în fişierele proprii de configurare ale extensiilor din directoarele /etc/php/*/ext. Pentru a activa/dezactiva extensiile partajate, sunt utilizate legăturile simbolice din /etc/php/*/ext-active. Dacă doriţi să activaţi o extensie, creaţi o legătură simbolică în /etc/php/*/ext-active care să indice către fişierul corespunzător [EXTENSIE].ini din /etc/php/*/ext/. Dacă doriţi să dezactivaţi o extensie, ştergeţi legătura simbolică.

Dacă aţi avut instalat întainte dev-php/PECL-apc, configurarea APC este stocată în fişierul dvs. php.ini. Dacă reinstalaţi noul pachet dev-php5/pecl-apc, fişierul de configurare al APC va fi scris în /etc/php/*5/ext/apc.ini.

Deci, va trebui să mutaţi directivele de configurare din /etc/php/*5/php.ini în /etc/php/*5/ext/apc.ini şi să creaţi o legătură simbolică de la /etc/php/*5/ext-active/apc.ini către /etc/php/*5/ext/apc.ini.

Notă: Dacă instalaţi PHP ca un modul Apache, asiguraţi-vă că reporniţi Apache după instalare şi configurare.

5.  Configuraţi Apache pentru funcţionarea cu PHP4 şi/sau PHP5

Pentru a configura Apache să încarce modulul de PHP4 şi PHP5 (mod_php), trebuie să adăugaţi -D PHP4, respectiv -D PHP5 în variabila APACHE2_OPTS din /etc/conf.d/apache2.

Cod 5.1: Configuraţi Apache pentru a încărca mod_php

(setări pentru PHP4)
APACHE2_OPTS="-D PHP4"

(sau setări pentru PHP5)
APACHE2_OPTS="-D PHP5"

Există multe posibilităţi de a face Apache să funcţioneze cu două versiuni de PHP în paralel. Cea mai simplă modalitate este să utilizaţi PHP4 şi PHP5 ca binare cgi, sau PHP4 ca cgi şi PHP5 ca modul (sau invers). Nu este posibil să utilizaţi şi modulul PHP4 şi pe cel PHP5 în aceeaşi instanţă Apache.

Am creat un Ghid de Configurare PHP4 şi PHP5 care explică unele soluţii posibile.

6.  Suport / Cererea de Ajutor

Dacă aveţi probleme cu noile pachete PHP, iată cum puteţi obţine ajutor:

  • Întrebări Comune despre PHP în Gentoo
  • Pagina de Dezvoltare a Repozitoriului Overlay de PHP
  • #gentoo-php de pe irc.freenode.net; aceasta este camera de discuţii unde sunt autorii repozitoriului overlay sunt prezenţi în mod regulat. Ne-ar plăcea să vă vedem acolo!
  • Forumurile Gentoo este un loc popular pentru a cere ajutor. Sunt mulţi alţi utilizatori Gentoo care citesc forumurile regulat, făcându-l un loc minunat de a ajuta în grabă.

Pentru detalii despre implementarea noilor pachete, consultaţi Posturile pe gentoo-dev ale lui Stuart şi intrările blog ale lui Stuart, începând de la 'Modificări Radicale pentru Suportul PHP5'.

Pe Pagina de Dezvoltare veţi găsi multă documentaţie şi ebuild-uri mult mai recente, ce vor fi mutate în arborele portage oficial, ulterior.



Imprimare

Actualizat la 19 Martie 2006

Sumar: Acest document descrie procedura pe care utilizatorii ar trebui să o urmeze pentru a-şi actualiza în siguranţă instalarea lor PHP.

Andreas Korthaus
Autor

Alin Dobre
Translator

Donate to support our development efforts.

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