# Rozšíření PHP (extensions) srozumitelně

> Rozšíření PHP vysvětlena: Core, Bundled a PECL, extension a zend_extension, php -m a proč méně modulů znamená vyšší bezpečnost.

Zdroj: https://phpsos.de/cs/php/php-erweiterungen/  
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ě:** Rozšíření PHP (extensions) jsou moduly v jazyce C, které PHP doplňují o funkce, například ovladače databází (PDO), šifrování (Sodium, OpenSSL) nebo bytecode cache OPcache. Příručka PHP rozlišuje rozšíření Core, Bundled, External a PECL. Načítají se přes `extension` nebo `zend_extension` v php.ini. Každé rozšíření běží v procesu PHP s jeho oprávněními. Proto platí: načítat jen to, co je potřeba, a aktualizovat společně s PHP.

## Co jsou rozšíření PHP?

Jádro PHP, [Zend Engine](https://phpsos.de/cs/php/zend-engine/), umí provádět kód, ale mnoho z toho, co aplikace potřebují, sídlí v rozšířeních. Jsou napsána v jazyce C a buď se pevně zkompilují do PHP, nebo se jako sdílená knihovna (`.so` v Linuxu, `.dll` ve Windows) načtou při spuštění.

Důležité pro rozhodovatele: rozšíření nejsou pluginy aplikace, ale součást běhového prostředí PHP. Instaluje je poskytovatel hostingu nebo správce serveru, nikoli agentura v CMS. Pokud rozšíření chybí, aplikace většinou hlásí chybu při instalaci nebo aktualizaci.

Stejně důležité je odlišení od balíčků Composer. Composer instaluje knihovny, které jsou napsány v PHP a leží v adresáři projektu, například balíček pro e-mail nebo PDF. Rozšíření jsou naproti tomu zkompilovaný kód, který se načítá při spuštění PHP a platí pro všechny aplikace na serveru. Mnoho balíčků Composer předpokládá určitá rozšíření a uvádí to v `composer.json` záznamy jako `ext-intl` nebo `ext-sodium`. Kdo chce ověřit, zda projekt najde všechna potřebná rozšíření, může v adresáři projektu spustit `composer check-platform-reqs`.

## Jaké druhy rozšíření existují?

Příručka PHP řadí rozšíření do čtyř skupin:

| Skupina | Význam podle příručky | Příklady z příručky |
|---|---|---|
| Core | součást jádra PHP, nelze vypnout | Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings |
| Bundled | dodávané s PHP | BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions |
| External | dodávané s PHP, vyžadují externí knihovny | cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip |
| PECL | dostupné přes PECL, zčásti s externími knihovnami | APCu, Memcached, MongoDB, Yaml |

Zařazení se může měnit. S PHP 8.4 byla podle stránky vydání rozšíření IMAP, OCI8, PDO_OCI a pspell odstraněna z dodávky a přesunuta do PECL. Kdo je používá, potřebuje po upgradu samostatnou instalaci, kterou je rovněž nutné udržovat.

## Jak se rozšíření načítají?

Sdílená rozšíření se podle příručky načítají direktivou `extension` v php.ini; rozšíření Zend, která zasahují hlouběji do enginu, přes `zend_extension`. Obě smějí být pouze v php.ini. Adresář určuje `extension_dir`, pro který příručka doporučuje absolutní cestu.

```ini
; běžná rozšíření
extension=pdo_mysql
extension=sodium
extension=intl

; rozšíření Zend: OPcache (načíst před Xdebug, jsou-li aktivní obě)
zend_extension=opcache
```

Distribuce jako Debian a Ubuntu zakládají pro každé rozšíření vlastní malý soubor `.ini` ve skenovaném adresáři, například pod `/etc/php/8.3/mods-available/`, a aktivují jej pro každé SAPI pomocí `phpenmod` a `phpdismod`. Jak PHP tyto soubory načítá, vysvětluje článek [php.ini vysvětlen](https://phpsos.de/cs/php/php-ini-erklaert/).

Rozšíření se instalují většinou přes správu balíčků, například jako balíček `php8.3-intl`. Rozšíření PECL lze sestavit pomocí `pecl` nebo `phpize`. Podle příručky je PECL zastaralé; doporučuje se PHP Installer for Extensions (PIE). Kdo si PHP celé sestavuje sám, najde pokyny v článku [Kompilace PHP ze zdrojového kódu](https://phpsos.de/cs/php/php-kompilieren/).

## Kontrola rozšíření: která jsou skutečně načtena?

Následující příkazy jsou čistě pro čtení. Pamatujte, že příkazová řádka může načítat jiná rozšíření než web.

```bash
php -m                              # moduly CLI
php-fpm8.3 -m                       # moduly PHP-FPM 8.3 (název podle distribuce)
php --re sodium | head -n 5         # funkce rozšíření
php --ri opcache                    # konfigurace rozšíření
php -r 'var_dump(extension_loaded("intl"));'
```

V kódu aplikace ověřují pomocí `extension_loaded()`, zda rozšíření existuje, a pomocí `get_loaded_extensions()`, která jsou načtena:

```php
<?php
$benoetigt = ['pdo_mysql', 'mbstring', 'intl', 'sodium'];
$fehlend = array_diff($benoetigt, array_map('strtolower', get_loaded_extensions()));
echo $fehlend ? 'Fehlt: ' . implode(', ', $fehlend) : 'Alle Erweiterungen vorhanden';
```

## Rozšíření a bezpečnost: méně je více

Rozšíření běží ve stejném procesu jako PHP a se stejnými oprávněními. Chyba v rozšíření proto může vážit stejně jako chyba v jádru. Plynou z toho čtyři pravidla:

1. **Načítat jen to, co je potřeba.** Každé další rozšíření zvětšuje útočnou plochu. Zkontrolujte svůj seznam podle systémových požadavků aplikace.
2. **Aktualizovat společně s PHP.** Dodávaná rozšíření přicházejí s aktualizací PHP. Rozšíření PECL a od třetích stran potřebují vlastní aktualizace a musí odpovídat nové verzi PHP.
3. **Vývojové nástroje ne do produkce.** Debuggery a profilery jako Xdebug patří jen do vývojových prostředí.
4. **Funkce cíleně uzamknout.** Tam, kde rozšíření přinášejí funkce pro systémové příkazy, pomůže [správné použití disable_functions](https://phpsos.de/cs/ratgeber/disable-functions/).

U PHP2Shell leží zranitelnosti v jádru PHP, nikoli v rozšíření. Vypnutí modulů je neuzavře; nutná je aktualizace na 8.5.12, 8.4.27, 8.3.36 nebo 8.2.35 s restartem všech procesů PHP. Po aktualizaci byste měli zkontrolovat, zda se všechna rozšíření znovu načítají, protože chybějící moduly se často projeví až u určitých funkcí. Jak mít závislosti trvale pod kontrolou, popisuje článek [Udržování závislostí aktuálních](https://phpsos.de/cs/blog/abhaengigkeiten-aktuell-halten/).

## Jak konkrétně pomáhá PHP SOS?

- **Zmapovat stav:** Vypíšeme pro každé SAPI všechna načtená rozšíření s původem a verzí.
- **Vyčistit:** Porovnáme seznam s potřebami vaší aplikace a po testu deaktivujeme nadbytečné.
- **Aktualizovat:** V rámci [zpevnění serveru](https://phpsos.de/cs/leistungen/server-haertung/) převedeme PHP a všechna cizí rozšíření na udržovaný stav.
- **Zkontrolovat po aktualizacích:** Ověříme, že jsou po každé aktualizaci PHP znovu načteny všechny potřebné moduly.


## Časté dotazy

**Jaký je rozdíl mezi extension a zend_extension?**  
Pomocí extension načítá PHP běžná rozšíření, jako jsou ovladače databází. Pomocí zend_extension se podle příručky načítají rozšíření Zend, která zasahují hlouběji do enginu, například OPcache nebo Xdebug. Obě direktivy smějí být pouze v php.ini.

**Jak zjistím, která rozšíření jsou načtena?**  
V příkazové řádce pomocí php -m, pro web přes funkci get_loaded_extensions() v krátce nahraném kontrolním souboru nebo přes php-fpm -m příslušné verze. Pamatujte, že CLI a webové SAPI mohou načítat různá rozšíření.

**Co je PECL a co je PIE?**  
PECL je adresář rozšíření PHP poskytovaných přes balíčkový systém PEAR. Podle příručky PHP je PECL zastaralé; doporučuje se místo něj PHP Installer for Extensions (PIE).

**Uzavře vypnutí rozšíření PHP2Shell?**  
Ne. Zranitelnosti PHP2Shell leží v jádru PHP, nikoli ve vypnutelném rozšíření. Méně rozšíření zmenšuje útočnou plochu obecně, ale nenahrazuje aktualizaci na opravenou verzi.

## Zdroje

- [Příručka PHP: Zařazení rozšíření](https://www.php.net/manual/en/extensions.membership.php)
- [Příručka PHP: Instalace rozšíření PECL](https://www.php.net/manual/en/install.pecl.intro.php)
- [Příručka PHP: Základní nastavení (extension)](https://www.php.net/manual/en/ini.core.php)
- [php.net: Vydání PHP 8.4](https://www.php.net/releases/8.4/en.php)
