# Kompilace PHP ze zdrojového kódu

> Kompilace PHP ze zdrojového kódu: předpoklady, volby configure, ověření podpisu, testy a vlastní povinnosti záplatování u vlastních buildů.

Zdroj: https://phpsos.de/cs/php/php-kompilieren/  
Stav: 25.10.2026  
Poskytovatel: PHP SOS, Nouzová pomoc pro PHP a bezpečnost serverů. Okamžitá pomoc přes WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20den%2C%20PHP%20SOS%2C%20pot%C5%99ebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20PHP%20serverem.%20Firma%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**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:

```bash
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.

```bash
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:

```bash
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](https://phpsos.de/cs/php/php-erweiterungen/) a [SAPI vysvětleno](https://phpsos.de/cs/php/sapi-erklaert/).

## 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ů](https://phpsos.de/cs/php2shell/php-fpm-neustart/).
5. Zkontrolovat běžící verzi, jak vysvětluje článek [Správná kontrola verze PHP a stavu záplat](https://phpsos.de/cs/php2shell/php-version-pruefen/).

> **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](https://phpsos.de/cs/leistungen/php-patch-service/) 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

- [Příručka PHP: Instalace ze zdrojového kódu](https://www.php.net/manual/en/install.unix.source.php)
- [Příručka PHP: Volby configure](https://www.php.net/manual/en/configure.about.php)
- [Příručka PHP: Instalace FPM](https://www.php.net/manual/en/install.fpm.install.php)
- [php.net: Zdrojové balíčky s kontrolními součty a podpisy](https://www.php.net/downloads.php)
