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 →

Composer: správce balíčků pro PHP

Composer stahuje a spravuje knihovny, na nichž stavějí moderní projekty PHP. Kdo rozumí composer.json, composer.lock a autoloaderu, nasazuje reprodukovatelně a bezpečněji.

Stav 4 min čteníZnalosti o PHP

Stručně: Composer je správce balíčků pro PHP. Ze souboru composer.json načte, jaké knihovny projekt potřebuje, stáhne je do adresáře vendor, přesné verze zaznamená v composer.lock a vytvoří autoloader, který třídy automaticky najde. Composer tak spravuje kód vaší aplikace, nikoli samotný interpret PHP: aktualizace Composeru neuzavře zranitelnost v PHP, jako je PHP2Shell.

Co je Composer a k čemu slouží?

Dnes už téměř žádná aplikace PHP nestojí jen na vlastním kódu. Frameworky, knihovny pro e-maily, tvorba PDF nebo napojení plateb přicházejí jako hotové balíčky. Composer, správce balíčků pro PHP, zajišťuje, aby se tyto balíčky sešly ve vhodných verzích a aby každá závislost přinesla své vlastní závislosti.

Pro rozhodovatele to znamená: velká část kódu, který na vašem serveru běží, pochází od třetích stran. To je efektivní, ale vyžaduje to péči. Pro správce a vývojáře to znamená: kdo Composer používá čistě, může kdykoli dohledat, jaká verze které knihovny běží v produkci.

Standardním zdrojem balíčků je podle dokumentace Composeru Packagist.org. Další zdroje, například interní repozitáře agentury, lze zapsat do composer.json pod repositories.

composer.json, composer.lock a vendor: tři stavební kameny

Composer pracuje se třemi věcmi, které je dobré znát, než převezmete server nebo zadáte práci agentuře.

Stavební kámen Obsah Patří do repozitáře?
composer.json požadované balíčky s rozsahy verzí (require, require-dev), pravidla autoload, nastavení ano
composer.lock přesně vyřešené verze všech balíčků, i nepřímých ano, podle dokumentace Composeru výslovně
vendor/ stažený kód balíčků a vytvořený autoloader ne, vytváří se při instalaci

Pod require jsou balíčky, které aplikace potřebuje v provozu. Pod require-dev jsou nástroje pro vývoj a testy, například testovací frameworky nebo statická analýza. Toto rozdělení je důležité, protože vývojové nástroje na produkčním serveru nemají co dělat.

{
    "require": {
        "php": ">=8.3",
        "monolog/monolog": "^3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^11.0"
    },
    "autoload": {
        "psr-4": { "App\\": "src/" }
    }
}

Údaje o verzích v příkladu jsou zvoleny jen pro ilustraci. Které verze váš projekt potřebuje, vyplývá z jeho požadavků.

install nebo update: rozdíl v provozu

Oba příkazy znějí podobně, ale mají velmi odlišné důsledky.

  • composer install čte composer.lock a nainstaluje přesně tam zaznamenané verze. Je to reprodukovatelné a patří to do nasazení.
  • composer update znovu vyřeší všechny závislosti, stáhne nejnovější odpovídající verze a přepíše composer.lock. To patří do vývoje, s následnými testy.

Podle dokumentace Composeru provede update po zápisu souboru lock navíc bezpečnostní kontrolu (audit), pokud se nevypne pomocí --no-audit. install standardně nekontroluje; k tomu slouží volba --audit.

Autoloading: jak Composer najde třídy

Composer vytváří soubor vendor/autoload.php. Jakmile se jednou vloží, PHP načte každou třídu teprve ve chvíli, kdy je potřeba. Pro vlastní kód se v sekci autoload stanoví, který jmenný prostor leží v kterém adresáři. Doporučuje se k tomu PSR-4, standard skupiny PHP-FIG. Jak přesně to funguje, vysvětluje stránka Jmenné prostory a autoloading; přehled všech standardů poskytuje stránka Standardy PSR.

<?php
require __DIR__ . '/../vendor/autoload.php';

$log = new Monolog\Logger('app');   // načte se automaticky podle potřeby

Composer v produkci: čisté nasazení

Pro nasazení se osvědčilo pevné pořadí. Nejlépe probíhá v build pipeline a ne ručně na serveru.

  1. Zkontrolovat soubor lock: composer validate zajistí, že composer.json je platný a composer.lock aktuální.
  2. Instalovat bez vývojových balíčků: composer install --no-dev vynechá require-dev.
  3. Optimalizovat autoloader: --optimize-autoloader (zkráceně -o) převede pravidla na seznam tříd. S --classmap-authoritative načítá PHP třídy výhradně z tohoto seznamu.
  4. Bezpečnostní kontrola: composer audit --locked ověří verze ze souboru lock proti známým bezpečnostním hlášením a hlásí opuštěné balíčky.
  5. vendor mimo webroot: Přes URL by měl být dostupný jen veřejný adresář se vstupním skriptem.
composer validate
composer install --no-dev --optimize-autoloader
composer audit --locked --no-dev

composer outdated navíc ukazuje, které nainstalované balíčky mají novější verze. To je základ pro plánované aktualizace místo hektických jednotlivých akcí.

Composer, bezpečnost a PHP2Shell

Composer a PHP2Shell se týkají dvou různých úrovní. Zranitelnosti CVE-2026-109618 a CVE-2026-109619 leží v samotném interpretu PHP. Opraveny jsou v PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35 a poté je nutné restartovat všechny procesy PHP. Žádné composer update ani balíček ve vendor na tom nic nezmění.

Přesto patří Composer do každé kontroly po incidentu. Kdo dostane na server škodlivý kód, může měnit i soubory ve vendor, a vendor/autoload.php se načítá při každém požadavku. Čerstvé composer install z ověřeného souboru lock do prázdného adresáře je proto dobrý způsob, jak obnovit stav balíčků. Jak závislosti pravidelně kontrolovat na známé zranitelnosti, popisuje průvodce composer audit.

Důležité

Zelený výsledek composer audit nic neříká o stavu záplat PHP. Běhové prostředí PHP kontrolujte zvlášť, například pomocí naší služby PHP-Patch.

Jak konkrétně pomáhá PHP SOS?

  • Pro každou aplikaci zjistíme verzi PHP, balíčky Composeru a stav souboru lock a přitom čistě oddělíme interpret od knihoven.
  • Ověříme, zda vendor a soubor lock k sobě sedí a zda v produkci neleží vývojové balíčky nebo změněné soubory.
  • Zřídíme reprodukovatelné nasazení s install --no-dev, optimalizovaným autoloaderem a auditem.
  • Po incidentu obnovíme stav balíčků z ověřeného souboru lock a zdokumentujeme výsledek.

Časté dotazy

Musí být composer.lock v repozitáři Git?

Ano. Dokumentace Composeru výslovně doporučuje composer.lock commitovat. Jen tak instalují vývoj, CI a produkce přesně stejné verze balíčků.

Jaký je rozdíl mezi composer install a composer update?

install nainstaluje verze zaznamenané v composer.lock. update znovu vyřeší závislosti, stáhne odpovídající novější verze a přepíše composer.lock. Na produkční server patří jen install.

Uzavře aktualizace Composeru zranitelnost PHP2Shell?

Ne. Composer spravuje knihovny vaší aplikace, nikoli interpret PHP. PHP2Shell se uzavře jen aktualizací běhového prostředí PHP na opravenou verzi a restartem všech procesů PHP.

Kde má ležet adresář vendor?

V ideálním případě mimo veřejně dostupný webový adresář. Mnoho frameworků vkládá do webrootu jen adresář public, zatímco vendor leží o úroveň výš.

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