# Composer: správca balíkov pre PHP

> Composer vysvetlený: pochopte composer.json, composer.lock, vendor a autoloader, čisto nasadzujte do produkcie a bezpečne udržiavajte závislosti.

Zdroj: https://phpsos.de/sk/php/composer/  
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:** Composer je správca balíkov pre PHP. Zo súboru `composer.json` číta, ktoré knižnice projekt potrebuje, sťahuje ich do priečinka `vendor`, presné verzie zaznamenáva v `composer.lock` a vytvára autoloader, ktorý automaticky nachádza triedy. Composer teda spravuje kód vašej aplikácie, nie samotný interpreter PHP: aktualizácia Composeru nezatvorí zraniteľnosť v PHP ako PHP2Shell.

## Čo je Composer a načo ho potrebujete?

Len máloktorá aplikácia PHP dnes pozostáva iba z vlastného kódu. Frameworky, knižnice pre e-maily, tvorba PDF alebo napojenia platieb pribúdajú ako hotové balíky. Composer, správca balíkov pre PHP, zabezpečuje, aby sa tieto balíky zišli v vhodných verziách a aby každá závislosť priniesla svoje vlastné závislosti.

Pre rozhodovateľov to znamená: veľká časť kódu, ktorý beží na vašom serveri, pochádza od tretích strán. To je efektívne, ale vyžaduje údržbu. Pre správcov a vývojárov to znamená: kto Composer používa čisto, vie kedykoľvek dohľadať, ktorá verzia ktorej knižnice beží v produkcii.

Štandardným zdrojom balíkov je podľa dokumentácie Composeru Packagist.org. Ďalšie zdroje, napríklad interné repozitáre agentúry, sa dajú zapísať v `composer.json` pod `repositories`.

## composer.json, composer.lock a vendor: tri stavebné prvky

Composer pracuje s tromi vecami, ktoré by ste mali poznať skôr, než prevezmete server alebo poveríte agentúru.

| Stavebný prvok | Obsah | Patrí do repozitára? |
|---|---|---|
| `composer.json` | požadované balíky s rozsahmi verzií (`require`, `require-dev`), pravidlá autoload, nastavenia | áno |
| `composer.lock` | presne vyriešené verzie všetkých balíkov, aj nepriamych | áno, podľa dokumentácie Composeru výslovne |
| `vendor/` | stiahnutý kód balíkov a vytvorený autoloader | nie, vzniká pri inštalácii |

Pod `require` stoja balíky, ktoré aplikácia potrebuje v prevádzke. Pod `require-dev` stoja nástroje pre vývoj a testy, napríklad testovacie frameworky alebo statická analýza. Toto oddelenie je dôležité, pretože vývojárske nástroje nemajú na produkčnom serveri čo robiť.

```json
{
    "require": {
        "php": ">=8.3",
        "monolog/monolog": "^3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^11.0"
    },
    "autoload": {
        "psr-4": { "App\\": "src/" }
    }
}
```

Údaje o verziách v príklade sú zvolené len na ilustráciu. Ktoré verzie váš projekt potrebuje, vyplýva z jeho požiadaviek.

## install alebo update: rozdiel v prevádzke

Oba príkazy znejú podobne, ale majú veľmi rozdielne dôsledky.

- `composer install` číta `composer.lock` a nainštaluje presne tam zaznamenané verzie. To je reprodukovateľné a patrí to do nasadenia.
- `composer update` znova vyrieši všetky závislosti, stiahne najnovšie vhodné verzie a prepíše `composer.lock`. To patrí do vývoja, s následnými testami.

Podľa dokumentácie Composeru vykoná `update` po zápise súboru lock navyše bezpečnostnú kontrolu (audit), pokiaľ sa nevypne cez `--no-audit`. `install` štandardne nekontroluje; na to slúži voľba `--audit`.

## Autoloading: ako Composer nachádza triedy

Composer vytvára súbor `vendor/autoload.php`. Keď sa raz zahrnie, PHP načíta každú triedu až vtedy, keď je potrebná. Pre vlastný kód sa v sekcii `autoload` určuje, ktorý namespace leží v ktorom priečinku. Odporúča sa na to PSR-4, štandard PHP-FIG. Ako presne to funguje, vysvetľuje stránka [Namespaces a autoloading](https://phpsos.de/sk/php/namespaces-autoloading/); prehľad všetkých štandardov dáva stránka [Štandardy PSR](https://phpsos.de/sk/php/psr-standards/).

```php
<?php
require __DIR__ . '/../vendor/autoload.php';

$log = new Monolog\Logger('app');   // automaticky sa načíta pri potrebe
```

## Composer v produkcii: čisté nasadenie

Pre nasadenie sa osvedčilo pevné poradie. Najlepšie beží v build pipeline, nie ručne na serveri.

1. **Skontrolovať súbor lock:** `composer validate` zabezpečí, že `composer.json` je platný a `composer.lock` aktuálny.
2. **Inštalovať bez vývojárskych balíkov:** `composer install --no-dev` vynechá `require-dev`.
3. **Optimalizovať autoloader:** `--optimize-autoloader` (skrátene `-o`) premení pravidlá na zoznam tried. S `--classmap-authoritative` načítava PHP triedy výlučne z tohto zoznamu.
4. **Bezpečnostná kontrola:** `composer audit --locked` kontroluje verzie zo súboru lock voči známym bezpečnostným hláseniam a hlási opustené balíky.
5. **vendor mimo webrootu:** Cez URL by mal byť dostupný len verejný priečinok so vstupným skriptom.

```bash
composer validate
composer install --no-dev --optimize-autoloader
composer audit --locked --no-dev
```

`composer outdated` navyše ukazuje, ktoré nainštalované balíky majú novšie verzie. To je základ pre plánované aktualizácie namiesto zbrklých jednotlivých akcií.

## Composer, bezpečnosť a PHP2Shell

Composer a PHP2Shell sa týkajú dvoch rôznych úrovní. Zraniteľnosti CVE-2026-109618 a CVE-2026-109619 ležia v samotnom interpreteri PHP. Opravené sú v PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35 a potom sa musia reštartovať všetky procesy PHP. Žiadny `composer update` a žiadny balík vo `vendor` na tom nič nemení.

Napriek tomu patrí Composer do každej kontroly po incidente. Kto dostane na server škodlivý kód, môže zmeniť aj súbory vo `vendor` a `vendor/autoload.php` sa načítava pri každej požiadavke. Čerstvý `composer install` z overeného súboru lock do prázdneho adresára je preto dobrá metóda, ako obnoviť stav balíkov. Ako pravidelne kontrolovať závislosti na známe zraniteľnosti, opisuje príručka [composer audit](https://phpsos.de/sk/ratgeber/composer-abhaengigkeiten-pruefen/).

> **Dôležité:**
> Zelený `composer audit` nehovorí nič o stave záplat PHP. Prostredie PHP kontrolujte osobitne, napríklad našou [službou záplatovania PHP](https://phpsos.de/sk/leistungen/php-patch-service/).

## Ako konkrétne pomáha PHP SOS?

- Pre každú aplikáciu zisťujeme verziu PHP, balíky Composer a stav súboru lock a pritom čisto oddeľujeme interpreter od knižníc.
- Kontrolujeme, či `vendor` a súbor lock navzájom zodpovedajú a či v produkcii neležia vývojárske balíky alebo zmenené súbory.
- Zavádzame reprodukovateľné nasadenie s `install --no-dev`, optimalizovaným autoloaderom a auditom.
- Po incidente obnovíme stav balíkov z overeného súboru lock a výsledok zdokumentujeme.


## Časté otázky

**Musí byť composer.lock v repozitári Git?**  
Áno. Dokumentácia Composeru výslovne odporúča commitovať composer.lock. Len tak nainštalujú vývoj, CI a produkcia presne tie isté verzie balíkov.

**Aký je rozdiel medzi composer install a composer update?**  
install nainštaluje verzie zaznamenané v composer.lock. update znova vyrieši závislosti, stiahne vhodné novšie verzie a prepíše composer.lock. Na produkčný server patrí iba install.

**Zatvorí aktualizácia Composeru zraniteľnosť PHP2Shell?**  
Nie. Composer spravuje knižnice vašej aplikácie, nie interpreter PHP. PHP2Shell sa zatvára iba aktualizáciou prostredia PHP na opravenú verziu a reštartom všetkých procesov PHP.

**Kde má ležať priečinok vendor?**  
Ideálne mimo verejne dostupného webového adresára. Mnohé frameworky preto vkladajú do webrootu iba priečinok public, kým vendor leží o úroveň vyššie.

## Zdroje

- [Composer: Basic usage](https://getcomposer.org/doc/01-basic-usage.md)
- [Composer: Command-line interface](https://getcomposer.org/doc/03-cli.md)
- [Composer: The composer.json schema](https://getcomposer.org/doc/04-schema.md)
