Aktuální situace: PHP2Shell. Dvě kritické zranitelnosti PHP (CVSS 9.2) umožňují spustit škodlivý kód bez přihlášení. Záplaty od 21. 10. 2026.Co nyní udělat →

Kompilace PHP ze zdrojového kódu

PHP lze sestavit sám pomocí configure a make. Získáte kontrolu nad rozšířeními a volbami, ale také plnou odpovědnost za každou bezpečnostní aktualizaci.

Stav 5 min čteníZnalosti o PHP

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:

  1. Konfigurovat: ./configure s požadovanými volbami. Při sestavení z Gitu předtím spusťte ./buildconf.
  2. Sestavit: make -j"$(nproc)"; počet úloh odpovídá podle README rozumně počtu jader procesoru.
  3. Testovat: make TEST_PHP_ARGS=-j4 test spustí testovací sadu PHP.
  4. 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:

  1. Stáhnout a ověřit zdrojový kód opravené verze.
  2. Sestavit znovu se stejnými volbami; php -i ukazuje původní řádek configure.
  3. Spustit testy a nainstalovat.
  4. Restartovat všechny procesy PHP, jak popisuje článek Restart PHP-FPM a všech workerů.
  5. Zkontrolovat běžící verzi, jak vysvětluje článek Správná kontrola verze PHP a stavu záplat.
Důležité

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.

Zdroje

Okamžitý kontakt

Každá hodina se počítá. Napište nám hned.

Stručně popište systém, verzi PHP a pozorování. Ozveme se, vyjasníme situaci a budeme pracovat na dálku, dokud nebude incident uzavřen a zdokumentován.

Okamžitá pomoc