# Rozšírenia PHP (extensions) a ich pochopenie

> PHP rozšírenia vysvetlené: Core, Bundled a PECL, extension a zend_extension, php -m a prečo je menej modulov bezpečnejších.

Zdroj: https://phpsos.de/sk/php/php-erweiterungen/  
Stav: 25.10.2026  
Poskytovateľ: PHP SOS, Núdzová pomoc pri PHP a bezpečnosť serverov. Okamžitá pomoc cez WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20de%C5%88%2C%20PHP%20SOS%2C%20potrebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20serverom%20s%20PHP.%20Spolo%C4%8Dnos%C5%A5%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručne:** Rozšírenia PHP (extensions) sú moduly v jazyku C, ktoré dopĺňajú PHP o funkcie, napríklad ovládače databáz (PDO), šifrovanie (Sodium, OpenSSL) alebo bytecode cache OPcache. Príručka PHP rozlišuje rozšírenia Core, Bundled, External a PECL. Načítavajú sa cez `extension` alebo `zend_extension` v php.ini. Každé rozšírenie beží v procese PHP s jeho právami. Preto platí: načítať iba to, čo sa potrebuje, a aktualizovať spolu s PHP.

## Čo sú rozšírenia PHP?

Jadro PHP, [Zend Engine](https://phpsos.de/sk/php/zend-engine/), vie vykonávať kód, ale mnohé z toho, čo aplikácie potrebujú, je v rozšíreniach. Sú napísané v jazyku C a buď sa pevne skompilujú do PHP, alebo sa pri štarte načítajú ako zdieľaná knižnica (`.so` v Linuxe, `.dll` vo Windows).

Dôležité pre rozhodovateľov: rozšírenia nie sú zásuvné moduly aplikácie, ale súčasť prostredia PHP. Inštaluje ich poskytovateľ hostingu alebo správca servera, nie agentúra v CMS. Ak rozšírenie chýba, aplikácia zvyčajne hlási chybu pri inštalácii alebo aktualizácii.

Rovnako dôležité je odlíšenie od balíkov Composer. Composer inštaluje knižnice, ktoré sú napísané v PHP a ležia v priečinku projektu, napríklad balík pre e-maily alebo PDF. Rozšírenia sú naopak skompilovaný kód, ktorý sa načíta pri štarte PHP a platí pre všetky aplikácie na serveri. Mnohé balíky Composer predpokladajú určité rozšírenia a poznamenávajú to v `composer.json` záznamami ako `ext-intl` alebo `ext-sodium`. Kto chce overiť, či projekt nachádza všetky potrebné rozšírenia, môže v priečinku projektu spustiť `composer check-platform-reqs`.

## Aké druhy rozšírení existujú?

Príručka PHP zaraďuje rozšírenia do štyroch skupín:

| Skupina | Význam podľa príručky | Príklady z príručky |
|---|---|---|
| Core | súčasť jadra PHP, nedá sa vypnúť | Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings |
| Bundled | dodávané spolu s PHP | BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions |
| External | dodávané spolu s PHP, potrebujú externé knižnice | cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip |
| PECL | dostupné cez PECL, sčasti s externými knižnicami | APCu, Memcached, MongoDB, Yaml |

Zaradenie sa môže meniť. S PHP 8.4 boli podľa stránky vydania rozšírenia IMAP, OCI8, PDO_OCI a pspell odstránené z balíka a presunuté do PECL. Kto ich používa, potrebuje po upgrade samostatnú inštaláciu, ktorú treba tiež udržiavať.

## Ako sa rozšírenia načítavajú?

Zdieľané rozšírenia sa podľa príručky načítavajú direktívou `extension` v php.ini; rozšírenia Zend, ktoré zasahujú hlbšie do enginu, direktívou `zend_extension`. Obe smú byť iba v php.ini. Adresár určuje `extension_dir`, pre ktorý príručka odporúča absolútnu cestu.

```ini
; bežné rozšírenia
extension=pdo_mysql
extension=sodium
extension=intl

; rozšírenie Zend: OPcache (načítať pred Xdebug, ak sú aktívne obe)
zend_extension=opcache
```

Distribúcie ako Debian a Ubuntu ukladajú pre každé rozšírenie vlastný malý súbor `.ini` do skenovaného adresára, napríklad pod `/etc/php/8.3/mods-available/`, a aktivujú ho pre každú SAPI pomocou `phpenmod` a `phpdismod`. Ako PHP tieto súbory číta, vysvetľuje [php.ini vysvetlený](https://phpsos.de/sk/php/php-ini-erklaert/).

Rozšírenia sa inštalujú väčšinou cez správu balíkov, napríklad ako balík `php8.3-intl`. Rozšírenia PECL sa dajú zostaviť pomocou `pecl` alebo `phpize`. Podľa príručky je PECL vyradený; odporúča sa PHP Installer for Extensions (PIE). Kto si PHP zostavuje celé sám, nájde upozornenia v časti [Kompilácia PHP zo zdrojového kódu](https://phpsos.de/sk/php/php-kompilieren/).

## Kontrola rozšírení: ktoré sú skutočne načítané?

Nasledujúce príkazy sú čisto na čítanie. Majte na pamäti, že príkazový riadok môže načítavať iné rozšírenia než web.

```bash
php -m                              # moduly CLI
php-fpm8.3 -m                       # moduly PHP-FPM 8.3 (názov podľa distribúcie)
php --re sodium | head -n 5         # funkcie rozšírenia
php --ri opcache                    # konfigurácia rozšírenia
php -r 'var_dump(extension_loaded("intl"));'
```

V kóde aplikácie kontrolujú pomocou `extension_loaded()`, či rozšírenie existuje, a pomocou `get_loaded_extensions()`, ktoré sú načítané:

```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šírenia a bezpečnosť: menej je viac

Rozšírenia bežia v rovnakom procese ako PHP a s rovnakými právami. Chyba v rozšírení preto môže byť rovnako závažná ako chyba v jadre. Z toho vyplývajú štyri pravidlá:

1. **Načítať len to, čo sa potrebuje.** Každé ďalšie rozšírenie zväčšuje útočnú plochu. Svoj zoznam porovnajte so systémovými požiadavkami aplikácie.
2. **Aktualizovať spolu s PHP.** Dodávané rozšírenia prichádzajú s aktualizáciou PHP. Rozšírenia PECL a cudzie rozšírenia vyžadujú vlastné aktualizácie a musia zodpovedať novej verzii PHP.
3. **Vývojárske nástroje nie do produkcie.** Debuggery a profilery ako Xdebug patria iba do vývojových prostredí.
4. **Funkcie cielene zablokovať.** Kde rozšírenia prinášajú funkcie pre systémové príkazy, pomáha [Správne používanie disable_functions](https://phpsos.de/sk/ratgeber/disable-functions/).

Pri PHP2Shell ležia zraniteľnosti v jadre PHP, nie v rozšírení. Vypnutie modulov ich nezatvorí; nutná je aktualizácia na 8.5.12, 8.4.27, 8.3.36 alebo 8.2.35 s reštartom všetkých procesov PHP. Po aktualizácii by ste mali skontrolovať, či sa všetky rozšírenia opäť načítavajú, pretože chýbajúce moduly sa často prejavia až pri určitých funkciách. Ako mať závislosti trvalo pod kontrolou, opisuje [Udržiavanie závislostí aktuálnych](https://phpsos.de/sk/blog/abhaengigkeiten-aktuell-halten/).

## Ako konkrétne pomáha PHP SOS?

- **Zmapovať stav:** Vypisujeme pre každú SAPI všetky načítané rozšírenia s pôvodom a verziou.
- **Vyčistiť:** Porovnávame zoznam s potrebami vašej aplikácie a po teste deaktivujeme nepotrebné.
- **Aktualizovať:** V rámci [zabezpečenia servera (hardening)](https://phpsos.de/sk/leistungen/server-haertung/) privádzame PHP a všetky cudzie rozšírenia do udržiavaného stavu.
- **Skontrolovať po aktualizáciách:** Kontrolujeme, že sú po každej aktualizácii PHP opäť načítané všetky potrebné moduly.


## Časté otázky

**Aký je rozdiel medzi extension a zend_extension?**  
Pomocou extension načíta PHP bežné rozšírenia ako ovládače databáz. Pomocou zend_extension sa podľa príručky načítavajú rozšírenia Zend, ktoré zasahujú hlbšie do enginu, napríklad OPcache alebo Xdebug. Obe direktívy smú byť iba v php.ini.

**Ako zistím, ktoré rozšírenia sú načítané?**  
V príkazovom riadku pomocou php -m, pre web cez funkciu get_loaded_extensions() v krátkodobom kontrolnom súbore alebo cez php-fpm -m príslušnej verzie. Majte na pamäti, že CLI a webová SAPI môžu načítavať rôzne rozšírenia.

**Čo je PECL a čo je PIE?**  
PECL je adresár rozšírení PHP poskytovaných cez balíčkový systém PEAR. Podľa príručky PHP je PECL vyradený; namiesto neho sa odporúča PHP Installer for Extensions (PIE).

**Zatvorí vypnutie rozšírenia PHP2Shell?**  
Nie. Zraniteľnosti PHP2Shell ležia v jadre PHP, nie vo vypnuteľnom rozšírení. Menej rozšírení zmenšuje útočnú plochu všeobecne, ale nenahrádza aktualizáciu na opravenú verziu.

## Zdroje

- [Príručka PHP: Zaradenie rozšírení](https://www.php.net/manual/en/extensions.membership.php)
- [Príručka PHP: Inštalácia rozšírení PECL](https://www.php.net/manual/en/install.pecl.intro.php)
- [Príručka PHP: Základné nastavenia (extension)](https://www.php.net/manual/en/ini.core.php)
- [php.net: Vydanie PHP 8.4](https://www.php.net/releases/8.4/en.php)
