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 →

Rozšíření PHP (extensions) srozumitelně

Rozšíření přinášejí do PHP ovladače databází, šifrování nebo cache. Jaké existují druhy, jak je načíst a zkontrolovat a co znamenají pro aktualizace a zpevnění.

Stav 4 min čteníZnalosti o PHP

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, 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.

; 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.

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.

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.

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
$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.

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.

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 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

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