Pe scurt: A compila PHP înseamnă a descărca pachetul sursă oficial de pe php.net, a stabili cu ./configure interfețele și extensiile dorite, a construi cu make, a verifica cu make test și apoi a instala. Aceasta dă control deplin asupra versiunii și a conținutului. Prețul: pentru fiecare actualizare de securitate sunteți responsabil singur, ca recent la PHP2Shell, când a trebuit reconstruit și toate procesele repornite.
Când sunt rezonabile build-urile PHP proprii
Cele mai multe servere obțin PHP dintr-o sursă de pachete: din distribuția Linux, dintr-un depozit al unui terț sau printr-o imagine de container. Pentru exploatarea normală, aceasta este de obicei cea mai bună alegere, deoarece remedierile de securitate sunt livrate automat.
Build-urile proprii își au totuși locul lor:
| Situație | Sursă de pachete | Build propriu |
|---|---|---|
| Server web obișnuit | de obicei mai bună | rar necesar |
| Versiune sau opțiune lipsă din sursa de încredere | indisponibilă | rezonabil |
| Depanare la PHP însuși, build de debug | limitată | rezonabil |
| Set minim de funcții pentru sisteme speciale | limitată | rezonabil |
| Actualizări de securitate | vin odată cu sursa | sarcină proprie |
Cine alege build-uri proprii are nevoie de un proces fix pentru actualizări, altfel avantajul devine risc.
Cerințe
Potrivit manualului, sunt necesare GNU make și un compilator C; din PHP 8.4, compilatorul trebuie să accepte C11. Cine construiește din depozitul Git, nu dintr-un pachet de lansare, are nevoie în plus de autoconf (de la 2.68), re2c (de la 1.0.3 pentru PHP 8.3 și mai noi) și bison (de la 3.0.0). README-ul din codul sursă indică pentru Ubuntu acest început:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
Pentru fiecare extensie suplimentară se adaugă pachetele de dezvoltare potrivite, de exemplu pentru OpenSSL sau libsodium.
Descărcarea codului sursă și verificarea autenticității
Un PHP construit singur este la fel de demn de încredere ca și codul său sursă. php.net oferă fiecare pachet cu sumă de control SHA-256 și semnătură GPG; cheile release managerilor se găsesc pe pagina de descărcare și pe pagina cu cheile GPG.
curl -O https://www.php.net/distributions/php-8.4.27.tar.xz
curl -O https://www.php.net/distributions/php-8.4.27.tar.xz.asc
sha256sum php-8.4.27.tar.xz # compară cu valoarea de pe php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Abia când suma de control și semnătura corespund, se merge mai departe.
Compilarea PHP: configure, make, test
Desfășurarea are patru pași:
- Configurarea:
./configurecu opțiunile dorite. La construirea din Git, rulați înainte./buildconf. - Construirea:
make -j"$(nproc)"; numărul de job-uri corespunde, potrivit README, în mod rezonabil numărului de nuclee ale procesorului. - Testarea:
make TEST_PHP_ARGS=-j4 testrulează suita de teste a PHP. - Instalarea:
make install, în funcție de directorul țintă cu drepturi de root.
Un exemplu pentru un build PHP-FPM cu director țintă propriu:
tar xf php-8.4.27.tar.xz && cd php-8.4.27
./configure --prefix=/opt/php-8.4 \
--with-config-file-path=/opt/php-8.4/etc \
--enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-fpm-systemd \
--with-openssl --with-sodium \
--disable-cgi
make -j"$(nproc)"
make TEST_PHP_ARGS=-j4 test
sudo make install
/opt/php-8.4/bin/php -v
Cele mai importante opțiuni, pe scurt:
| Opțiune | Efect |
|---|---|
--enable-fpm |
construiește PHP-FPM; în plus --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
directorul în care PHP caută php.ini |
--with-openssl |
suport OpenSSL; din PHP 7.4, calea este găsită prin pkg-config |
--with-sodium |
criptografie modernă cu libsodium |
--disable-cgi |
renunță la varianta CGI, dacă nu este necesară |
--enable-debug |
simboluri de debug, recomandate potrivit README pentru dezvoltare, nu pentru producție |
--enable-zts |
siguranță la thread-uri pentru moduri de operare cu thread-uri |
Cu --prefix se pot instala una lângă alta mai multe versiuni construite singur, de exemplu în /opt/php-8.3 și /opt/php-8.4. Aceasta ușurează trecerile, dar cere disciplină: fiecare versiune instalată este un software separat, care trebuie reconstruit la fiecare lansare de securitate, chiar dacă în acel moment niciun site nu o folosește. Build-urile care nu mai sunt necesare trebuie eliminate complet. Ce opțiuni are un build existent arată php -i în linia „Configure Command”; ea este cel mai bun model pentru următoarea reconstrucție.
Observație despre OPcache: din PHP 8.5, OPcache este, potrivit RFC-ului adoptat, compilat fix. La versiunile mai vechi, el este construit ca extensie și încărcat prin zend_extension. Ce sunt extensiile și interfețele explică Înțelegerea extensiilor PHP și SAPI explicat.
Build-urile proprii și securitatea: obligațiile după PHP2Shell
PHP compilat singur are un avantaj real de securitate: construiți doar ce aveți nevoie. Fiecare extensie neconstruită și fiecare mod de operare neconstruit este cod care nu poate conține o vulnerabilitate. Un build fără CGI, cu puține extensii și căi clare este ușor de supravegheat.
În fața acestuia stă o obligație grea. Distribuțiile au livrat la PHP2Shell backport-uri în parte la 21.10.2026; cine construiește singur nu primește nimic automat. Concret, aceasta a însemnat:
- Descărcarea și verificarea codului sursă al versiunii cu remedierea.
- Reconstruirea cu opțiuni identice;
php -iarată linia configure inițială. - Rularea testelor și instalarea.
- Repornirea tuturor proceselor PHP, așa cum este descris la Repornirea PHP-FPM și a tuturor workerilor.
- Verificarea versiunii care rulează, așa cum este explicat la Verificarea corectă a versiunii PHP și a stării de patch.
Un PHP construit singur nu apare în niciun manager de pachete. Țineți un inventar al serverelor pe care rulează build-uri proprii și în ce versiune, altfel ele vor fi trecute cu vederea la următoarea vulnerabilitate.
Cum ajută PHP SOS concret?
Prin serviciul PHP-Patch sprijinim operatorii de build-uri proprii:
- Inventarierea: Găsim versiunile PHP construite singur și citim opțiunile lor de build.
- Reconstruirea: Versiune cu remediere, cu semnătură verificată, aceleași opțiuni și rulare completă a testelor.
- Distribuirea și repornirea: Instalare, repornirea tuturor proceselor, controlul versiunii care rulează.
- Simplificarea: Acolo unde o sursă de pachete întreținută îndeplinește același scop, arătăm trecerea la aceasta.
Întrebări frecvente
Când merită să compilez PHP singur?
Când o versiune sau o opțiune necesară nu este disponibilă în nicio sursă de pachete de încredere, pentru dezvoltare și depanare la PHP însuși sau pentru build-uri foarte subțiri, speciale. Pentru servere web obișnuite, pachetele întreținute sunt de regulă alegerea mai bună.
Cum verific că sursa PHP este autentică?
php.net oferă pentru fiecare pachet sursă o sumă de control SHA-256 și o semnătură GPG. Comparați suma de control și verificați semnătura cu cheile release managerilor publicate pe php.net.
Trebuie să recompilez după o lansare de securitate?
Da. Un PHP construit singur nu primește actualizări de la distribuție. După PHP2Shell, aceasta a însemnat: construirea codului sursă 8.5.12, 8.4.27, 8.3.36 sau 8.2.35, instalarea și repornirea tuturor proceselor PHP.
Unde găsesc toate opțiunile configure?
Cu ./configure --help în directorul sursă. Manualul menționează cele mai importante opțiuni de bază, iar opțiunile pentru extensii se găsesc pe paginile lor din manual.