Stručne: Kompilovať PHP znamená stiahnuť oficiálny zdrojový balík z php.net, pomocou ./configure určiť požadované rozhrania a rozšírenia, zostaviť pomocou make, overiť pomocou make test a potom nainštalovať. Dáva to plnú kontrolu nad verziou a rozsahom. Cena: za každú bezpečnostnú aktualizáciu zodpovedáte sami, ako naposledy pri PHP2Shell, keď sa muselo zostaviť znova a reštartovať všetky procesy.
Kedy sú vlastné zostavenia PHP zmysluplné
Väčšina serverov berie PHP zo zdroja balíkov: z distribúcie Linuxu, z repozitára tretej strany alebo cez obraz kontajnera. Pre bežnú prevádzku je to zvyčajne najlepšia voľba, pretože sa bezpečnostné opravy dodávajú automaticky.
Vlastné zostavenia majú napriek tomu svoje miesto:
| Situácia | Zdroj balíkov | Vlastné zostavenie |
|---|---|---|
| Bežný webový server | zvyčajne lepšie | zriedka potrebné |
| Verzia alebo voľba nie je v dôveryhodnom zdroji | nie je dostupná | zmysluplné |
| Hľadanie chýb v samotnom PHP, debug zostavenie | obmedzené | zmysluplné |
| Minimálny rozsah funkcií pre špeciálne systémy | obmedzené | zmysluplné |
| Bezpečnostné aktualizácie | prichádzajú so zdrojom | vlastná úloha |
Kto sa rozhodne pre vlastné zostavenia, potrebuje pevný proces aktualizácií, inak sa výhoda zmení na riziko.
Predpoklady
Podľa príručky sa vyžaduje GNU make a kompilátor C; od PHP 8.4 musí kompilátor podporovať C11. Kto zostavuje z repozitára Git namiesto vydaného balíka, potrebuje navyše autoconf (od 2.68), re2c (od 1.0.3 pre PHP 8.3 a novšie) a bison (od 3.0.0). README v zdrojovom kóde uvádza pre Ubuntu tento úvod:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
Ku každému ďalšiemu rozšíreniu pribudnú príslušné vývojové balíky, napríklad pre OpenSSL alebo libsodium.
Stiahnutie zdrojového kódu a kontrola pravosti
Vlastnoručne zostavené PHP je len tak dôveryhodné ako jeho zdrojový kód. php.net ponúka každý balík s kontrolným súčtom SHA-256 a podpisom GPG; kľúče release manažérov sú na stránke sťahovania a na stránke s kľúčmi 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 # porovnať s hodnotou na php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Až keď kontrolný súčet a podpis sedia, pokračuje sa ďalej.
Kompilácia PHP: configure, make, test
Postup má štyri kroky:
- Konfigurácia:
./configures požadovanými voľbami. Pri zostavení z Gitu predtým spustiť./buildconf. - Zostavenie:
make -j"$(nproc)"; počet jobov zodpovedá podľa README zmysluplne počtu jadier procesora. - Testovanie:
make TEST_PHP_ARGS=-j4 testspustí testovaciu sadu PHP. - Inštalácia:
make install, podľa cieľového adresára s právami root.
Príklad zostavenia PHP-FPM s vlastným cieľovým adresárom:
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
Najdôležitejšie voľby v prehľade:
| Voľba | Účinok |
|---|---|
--enable-fpm |
zostaví PHP-FPM; k tomu --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
adresár, v ktorom PHP hľadá php.ini |
--with-openssl |
podpora OpenSSL; od PHP 7.4 sa cesta nachádza cez pkg-config |
--with-sodium |
moderná kryptografia s libsodium |
--disable-cgi |
vynecháva variant CGI, ak sa nepotrebuje |
--enable-debug |
ladiace symboly, podľa README odporúčané pre vývoj, nie pre produkciu |
--enable-zts |
bezpečnosť vlákien pre spôsoby prevádzky s vláknami |
Pomocou --prefix možno nainštalovať vedľa seba viac vlastnoručne zostavených verzií, napríklad v /opt/php-8.3 a /opt/php-8.4. Uľahčuje to prechody, ale vyžaduje disciplínu: každá nainštalovaná verzia je samostatný softvér, ktorý sa musí pri každom bezpečnostnom vydaní zostaviť znova, aj keď ju práve nepoužíva žiadny web. Zostavenia, ktoré sa už nepotrebujú, patria úplne odstrániť. Ktoré voľby má existujúce zostavenie, ukáže php -i v riadku „Configure Command“; je to najlepšia predloha pre ďalšie zostavenie.
Poznámka k OPcache: od PHP 8.5 je OPcache podľa prijatého RFC pevne skompilovaná. Pri starších verziách sa zostavuje ako rozšírenie a načítava pomocou zend_extension. Čo sú rozšírenia a rozhrania, vysvetľujú Pochopenie rozšírení PHP a SAPI vysvetlené.
Vlastné zostavenia a bezpečnosť: povinnosti po PHP2Shell
Samostatne kompilované PHP má skutočnú bezpečnostnú výhodu: zostavíte len to, čo potrebujete. Každé nezostavené rozšírenie a každý nezostavený spôsob prevádzky je kód, ktorý nemôže obsahovať zraniteľnosť. Zostavenie bez CGI, s niekoľkými rozšíreniami a jasnými cestami je prehľadné.
Proti tomu stojí tvrdá povinnosť. Distribúcie dodali pri PHP2Shell backporty čiastočne 21. 10. 2026; kto zostavuje sám, nedostane nič automaticky. Konkrétne to znamenalo:
- Stiahnuť a skontrolovať zdrojový kód opravenej verzie.
- Zostaviť znova s identickými voľbami;
php -iukazuje pôvodný riadok configure. - Spustiť testy a nainštalovať.
- Reštartovať všetky procesy PHP, ako je opísané v Reštart PHP-FPM a všetkých workerov.
- Skontrolovať bežiacu verziu, ako vysvetľuje Správna kontrola verzie PHP a stavu záplat.
Vlastnoručne zostavené PHP sa neobjaví v žiadnom správcovi balíkov. Veďte inventár, na ktorých serveroch beží ktoré vlastné zostavenie v akej verzii, inak ich pri ďalšej zraniteľnosti prehliadnete.
Ako PHP SOS konkrétne pomáha?
Prostredníctvom služby záplatovania PHP podporujeme prevádzkovateľov vlastných zostavení:
- Zistenie stavu: Nachádzame vlastnoručne zostavené verzie PHP a čítame ich voľby zostavenia.
- Nové zostavenie: Opravená verzia s overeným podpisom, rovnakými voľbami a kompletným testovacím behom.
- Nasadenie a reštart: Inštalácia, reštart všetkých procesov, kontrola bežiacej verzie.
- Zjednodušenie: Kde rovnaký účel plní udržiavaný zdroj balíkov, ukazujeme prechod naň.
Časté otázky
Kedy sa oplatí skompilovať PHP samostatne?
Keď potrebná verzia alebo voľba nie je dostupná v žiadnom dôveryhodnom zdroji balíkov, pri vývoji a hľadaní chýb v samotnom PHP alebo pri veľmi štíhlych, špeciálnych zostaveniach. Pre bežné webové servery sú udržiavané balíky zvyčajne lepšou voľbou.
Ako overím, že zdrojový kód PHP je pravý?
php.net ponúka ku každému zdrojovému balíku kontrolný súčet SHA-256 a podpis GPG. Porovnajte kontrolný súčet a overte podpis kľúčmi release manažérov zverejnenými na php.net.
Musím po bezpečnostnom vydaní kompilovať znova?
Áno. Vlastnoručne zostavené PHP nedostáva aktualizácie od distribúcie. Po PHP2Shell to znamenalo: zostaviť zdrojový kód 8.5.12, 8.4.27, 8.3.36 alebo 8.2.35, nainštalovať ho a reštartovať všetky procesy PHP.
Kde nájdem všetky možnosti configure?
Pomocou ./configure --help v zdrojovom adresári. Príručka uvádza najdôležitejšie jadrové možnosti, možnosti pre rozšírenia sú na stránkach príručky týchto rozšírení.