# Composer: PHP paketihaldur

> Composer selgitatud: composer.json, composer.lock, vendor ja autoloader mõistmine, korralik tootmisse väljaveeretamine ning sõltuvuste turvaline hooldus.

Allikas: https://phpsos.de/et/php/composer/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** Composer on PHP paketihaldur. See loeb failist `composer.json`, milliseid teeke projekt vajab, laadib need kausta `vendor`, hoiab täpsed versioonid failis `composer.lock` ja loob autoloaderi, mis klasse automaatselt leiab. Composer haldab seega teie rakenduse koodi, mitte PHP interpretaatorit ennast: Composeri uuendus ei sulge PHP-s olevat auku nagu PHP2Shell.

## Mis on Composer ja milleks seda vaja on?

Vaevalt koosneb tänapäeval ükski PHP rakendus ainult omast koodist. Raamistikud, meiliteegid, PDF-i loomine või maksesidumised lisanduvad valmispakettidena. Composer, PHP paketihaldur, hoolitseb selle eest, et need paketid koonduksid sobivates versioonides ja et iga sõltuvus tooks kaasa oma sõltuvused.

Otsustajale tähendab see: suur osa koodist, mis teie serveris töötab, pärineb kolmandatelt osapooltelt. See on tõhus, kuid nõuab hooldust. Administraatoritele ja arendajatele tähendab see: kes Composerit korralikult kasutab, saab alati jälgida, milline teegi versioon tootmises töötab.

Paketi standardallikas on Composeri dokumentatsiooni järgi Packagist.org. Muid allikaid, näiteks agentuuri sisemisi hoidlaid, saab kanda faili `composer.json` jaotisse `repositories`.

## composer.json, composer.lock ja vendor: kolm ehituskivi

Composer töötab kolme asjaga, mida tasub tunda enne serveri üle võtmist või agentuuri tellimist.

| Ehituskivi | Sisu | Kas kuulub hoidlasse? |
|---|---|---|
| `composer.json` | soovitud paketid versioonivahemikega (`require`, `require-dev`), autoload-reeglid, sätted | jah |
| `composer.lock` | kõigi pakettide, ka kaudsete, täpselt lahendatud versioonid | jah, Composeri dokumentatsiooni järgi selgesõnaliselt |
| `vendor/` | pakettide allalaaditud kood ja loodud autoloader | ei, luuakse paigaldamisel |

Jaotises `require` on paketid, mida rakendus töös vajab. Jaotises `require-dev` on arenduse ja testimise tööriistad, näiteks testiraamistikud või staatiline analüüs. See eraldus on oluline, sest arendustööriistadel ei ole tootmisserveris midagi teha.

```json
{
    "require": {
        "php": ">=8.3",
        "monolog/monolog": "^3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^11.0"
    },
    "autoload": {
        "psr-4": { "App\\": "src/" }
    }
}
```

Näite versiooniandmed on valitud ainult illustreerimiseks. Milliseid versioone teie projekt vajab, tuleneb selle nõuetest.

## install või update: vahe käitamises

Need kaks käsku kõlavad sarnaselt, kuid neil on väga erinevad tagajärjed.

- `composer install` loeb faili `composer.lock` ja paigaldab täpselt seal fikseeritud versioonid. See on korratav ja kuulub väljaveeretamisse.
- `composer update` lahendab kõik sõltuvused uuesti, toob uusimad sobivad versioonid ja kirjutab faili `composer.lock` ümber. See kuulub arendusse, koos järgnevate testidega.

Composeri dokumentatsiooni järgi teeb `update` pärast lukufaili kirjutamist lisaks turvakontrolli (audit), kui seda ei lülitata välja valikuga `--no-audit`. `install` vaikimisi ei kontrolli; selleks on olemas valik `--audit`.

## Autoloading: kuidas Composer klasse leiab

Composer loob faili `vendor/autoload.php`. Kui see üks kord kaasata, laadib PHP iga klassi alles siis, kui seda vaja on. Oma koodi jaoks määratakse jaotises `autoload`, milline nimeruum asub millises kaustas. Selleks soovitatakse PSR-4, PHP-FIG standardit. Kuidas see täpselt töötab, selgitab leht [Nimeruumid ja autoloading](https://phpsos.de/et/php/namespaces-autoloading/); ülevaate kõigist standarditest annab leht [PSR-standardid](https://phpsos.de/et/php/psr-standards/).

```php
<?php
require __DIR__ . '/../vendor/autoload.php';

$log = new Monolog\Logger('app');   // laaditakse vajadusel automaatselt
```

## Composer tootmises: korralik väljaveeretamine

Väljaveeretamiseks on end õigustanud kindel järjekord. Kõige parem on see käivitada build-torus, mitte käsitsi serveris.

1. **Lukufaili kontroll:** `composer validate` tagab, et `composer.json` on kehtiv ja `composer.lock` ajakohane.
2. **Paigaldamine ilma arenduspakettideta:** `composer install --no-dev` jätab `require-dev` välja.
3. **Autoloaderi optimeerimine:** `--optimize-autoloader` (lühidalt `-o`) muudab reeglid klassinimekirjaks. Valikuga `--classmap-authoritative` laadib PHP klasse ainult sellest nimekirjast.
4. **Turvakontroll:** `composer audit --locked` kontrollib lukufaili versioone teadaolevate turvateadete vastu ja teatab hüljatud pakettidest.
5. **vendor väljaspool veebijuurt:** URL-i kaudu peaks olema kättesaadav ainult avalik kaust sisenemisskriptiga.

```bash
composer validate
composer install --no-dev --optimize-autoloader
composer audit --locked --no-dev
```

`composer outdated` näitab lisaks, millistel paigaldatud pakettidel on uuemad versioonid. See on alus planeeritud uuendustele kiirustavate üksiktegevuste asemel.

## Composer, turvalisus ja PHP2Shell

Composer ja PHP2Shell puudutavad kahte erinevat tasandit. Augud CVE-2026-109618 ja CVE-2026-109619 asuvad PHP interpretaatoris endas. Parandatud on need versioonides PHP 8.5.12, 8.4.27, 8.3.36 ja 8.2.35 ning kõik PHP protsessid tuleb pärast seda uuesti käivitada. Ükski `composer update` ega pakett kaustas `vendor` sellel midagi ei muuda.

Sellegipoolest kuulub Composer iga intsidendijärgse kontrolli juurde. Kes toob serverisse kahjuliku koodi, saab muuta ka faile kaustas `vendor` ja `vendor/autoload.php` laaditakse igal päringul. Värske `composer install` kontrollitud lukufailist tühja kataloogi on seetõttu hea viis paketikoosseisu taastamiseks. Kuidas sõltuvusi regulaarselt teadaolevate aukude suhtes kontrollida, kirjeldab juhend [composer audit](https://phpsos.de/et/ratgeber/composer-abhaengigkeiten-pruefen/).

> **Oluline:**
> Roheline `composer audit` ei ütle PHP paikaseisu kohta midagi. Kontrollige PHP käitusaega eraldi, näiteks meie [PHP paigateenusega](https://phpsos.de/et/leistungen/php-patch-service/).

## Kuidas PHP SOS konkreetselt aitab?

- Kaardistame iga rakenduse PHP versiooni, Composeri paketid ja lukufaili seisu ning eristame seejuures selgelt interpretaatorit ja teeke.
- Kontrollime, kas `vendor` ja lukufail sobivad kokku ning kas tootmises asub arenduspakette või muudetud faile.
- Seame sisse korratava väljaveeretamise käsuga `install --no-dev`, optimeeritud autoloaderi ja auditiga.
- Pärast intsidenti taastame paketikoosseisu kontrollitud lukufailist ja dokumenteerime tulemuse.


## Korduma kippuvad küsimused

**Kas composer.lock peab minema Git-hoidlasse?**  
Jah. Composeri dokumentatsioon soovitab selgesõnaliselt composer.lock faili commit'ida. Ainult nii paigaldavad arendus, CI ja tootmine täpselt samad paketiversioonid.

**Mis vahe on composer install ja composer update vahel?**  
install paigaldab versioonid, mis on kirjas failis composer.lock. update lahendab sõltuvused uuesti, toob sobivad uuemad versioonid ja kirjutab composer.lock faili ümber. Tootmisserverisse kuulub ainult install.

**Kas Composeri uuendus sulgeb PHP2Shelli augu?**  
Ei. Composer haldab teie rakenduse teeke, mitte PHP interpretaatorit. PHP2Shell suletakse ainult PHP käitusaja uuendusega parandatud versioonile ja kõigi PHP protsesside taaskäivitusega.

**Kus peaks vendor kaust asuma?**  
Ideaalis väljaspool avalikult kättesaadavat veebikataloogi. Paljud raamistikud panevad veebijuurde ainult public kausta, samal ajal kui vendor asub ühe taseme kõrgemal.

## Allikad

- [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)
