Stručně: Kompilovat PHP znamená stáhnout oficiální zdrojový balíček z php.net, pomocí ./configure určit požadovaná rozhraní a rozšíření, sestavit pomocí make, ověřit pomocí make test a poté nainstalovat. Dává to plnou kontrolu nad verzí a rozsahem. Cena: za každou bezpečnostní aktualizaci odpovídáte sami, jak naposledy u PHP2Shell, kdy bylo nutné sestavit znovu a restartovat všechny procesy.
Kdy mají vlastní buildy PHP smysl
Většina serverů získává PHP ze zdroje balíčků: z distribuce Linuxu, z repozitáře třetí strany nebo prostřednictvím image kontejneru. Pro běžný provoz je to většinou nejlepší volba, protože se bezpečnostní opravy dodávají automaticky.
Vlastní buildy mají přesto své místo:
| Situace | Zdroj balíčků | Vlastní build |
|---|---|---|
| Běžný webový server | většinou lepší | zřídka nutný |
| Verze nebo volba není v důvěryhodném zdroji | není dostupné | smysluplné |
| Hledání chyb v samotném PHP, ladicí build | omezeně | smysluplné |
| Minimální rozsah funkcí pro speciální systémy | omezeně | smysluplné |
| Bezpečnostní aktualizace | přicházejí se zdrojem | vlastní úkol |
Kdo se pro vlastní buildy rozhodne, potřebuje pevný proces aktualizací, jinak se z výhody stane riziko.
Předpoklady
Podle příručky je potřeba GNU make a překladač jazyka C; od PHP 8.4 musí překladač podporovat C11. Kdo sestavuje z repozitáře Git místo z balíčku vydání, potřebuje navíc autoconf (od 2.68), re2c (od 1.0.3 pro PHP 8.3 a novější) a bison (od 3.0.0). README ve zdrojovém kódu uvádí pro Ubuntu tento úvod:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
Pro každé další rozšíření přibývají odpovídající vývojové balíčky, například pro OpenSSL nebo libsodium.
Stažení zdrojového kódu a ověření pravosti
Vlastní build PHP je tak důvěryhodný, jako je jeho zdrojový kód. php.net nabízí každý balíček s kontrolním součtem SHA-256 a podpisem GPG; klíče release manažerů jsou na stránce ke stažení a na stránce s klíči 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 # porovnat s hodnotou na php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Teprve když kontrolní součet a podpis sedí, pokračuje se dál.
Kompilace PHP: configure, make, test
Postup má čtyři kroky:
- Konfigurovat:
./configures požadovanými volbami. Při sestavení z Gitu předtím spusťte./buildconf. - Sestavit:
make -j"$(nproc)"; počet úloh odpovídá podle README rozumně počtu jader procesoru. - Testovat:
make TEST_PHP_ARGS=-j4 testspustí testovací sadu PHP. - Instalovat:
make install, podle cílového adresáře s právy roota.
Příklad buildu PHP-FPM s vlastním cílovým adresářem:
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
Nejdůležitější volby v přehledu:
| Volba | Účinek |
|---|---|
--enable-fpm |
sestaví PHP-FPM; k tomu --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
adresář, ve kterém PHP hledá php.ini |
--with-openssl |
podpora OpenSSL; od PHP 7.4 se cesta nachází přes pkg-config |
--with-sodium |
moderní kryptografie s libsodium |
--disable-cgi |
vynechá variantu CGI, pokud ji nepotřebujete |
--enable-debug |
ladicí symboly, podle README doporučeno pro vývoj, ne pro produkci |
--enable-zts |
bezpečnost vláken pro provozní režimy s vlákny |
Pomocí --prefix lze nainstalovat více vlastních verzí vedle sebe, například pod /opt/php-8.3 a /opt/php-8.4. To usnadňuje přechody, ale vyžaduje disciplínu: každá nainstalovaná verze je samostatný software, který se musí při každém bezpečnostním vydání sestavit znovu, i když ji právě žádný web nepoužívá. Už nepotřebné buildy je třeba zcela odstranit. Jaké volby má existující build, ukazuje php -i na řádku „Configure Command“; je nejlepší předlohou pro další sestavení.
Poznámka k OPcache: od PHP 8.5 je OPcache podle přijatého RFC pevně zkompilována. U starších verzí se sestavuje jako rozšíření a načítá se pomocí zend_extension. Co jsou rozšíření a rozhraní, vysvětlují články Porozumění rozšířením PHP a SAPI vysvětleno.
Vlastní buildy a bezpečnost: povinnosti po PHP2Shell
Kompilované PHP vlastními silami má skutečnou bezpečnostní výhodu: sestavíte jen to, co potřebujete. Každé nesestavené rozšíření a každý nesestavený provozní režim je kód, který nemůže obsahovat zranitelnost. Build bez CGI, s malým počtem rozšíření a jasnými cestami je přehledný.
Proti tomu stojí tvrdá povinnost. Distribuce u PHP2Shell dodaly backporty zčásti 21. 10. 2026; kdo sestavuje sám, nedostane nic automaticky. Konkrétně to znamenalo:
- Stáhnout a ověřit zdrojový kód opravené verze.
- Sestavit znovu se stejnými volbami;
php -iukazuje původní řádek configure. - Spustit testy a nainstalovat.
- Restartovat všechny procesy PHP, jak popisuje článek Restart PHP-FPM a všech workerů.
- Zkontrolovat běžící verzi, jak vysvětluje článek Správná kontrola verze PHP a stavu záplat.
Vlastní build PHP se neobjeví v žádném správci balíčků. Veďte inventář, na kterých serverech běží vlastní buildy v jaké verzi, jinak je při další zranitelnosti přehlédnete.
Jak konkrétně pomáhá PHP SOS?
Prostřednictvím služby záplatování PHP podporujeme provozovatele vlastních buildů:
- Zachytit stav: Najdeme vlastní sestavené verze PHP a přečteme jejich volby sestavení.
- Sestavit znovu: Opravená verze s ověřeným podpisem, stejnými volbami a kompletním testovacím během.
- Nasadit a restartovat: Instalace, restart všech procesů, kontrola běžící verze.
- Zjednodušit: Kde stejný účel splní udržovaný zdroj balíčků, ukážeme přechod na něj.
Časté dotazy
Kdy se vyplatí kompilovat PHP vlastními silami?
Když potřebná verze nebo volba není dostupná v žádném důvěryhodném zdroji balíčků, pro vývoj a hledání chyb v samotném PHP nebo pro velmi štíhlé, speciální buildy. Pro běžné webové servery jsou většinou lepší volbou udržované balíčky.
Jak ověřím, že je zdrojový kód PHP pravý?
php.net nabízí ke každému zdrojovému balíčku kontrolní součet SHA-256 a podpis GPG. Porovnejte kontrolní součet a ověřte podpis pomocí klíčů release manažerů zveřejněných na php.net.
Musím po bezpečnostním vydání kompilovat znovu?
Ano. Vlastní build PHP nedostává aktualizace z distribuce. Po PHP2Shell to znamenalo: sestavit zdrojový kód 8.5.12, 8.4.27, 8.3.36 nebo 8.2.35, nainstalovat a restartovat všechny procesy PHP.
Kde najdu všechny volby configure?
Pomocí ./configure --help ve zdrojovém adresáři. Příručka uvádí nejdůležitější základní volby, volby pro rozšíření jsou na stránkách příručky k nim.