# Composer: PHP pakotņu pārvaldnieks

> Composer izskaidrots: izprast composer.json, composer.lock, vendor un autoloader, droši izvietot ražošanā un uzturēt atkarības drošā stāvoklī.

Avots: https://phpsos.de/lv/php/composer/  
Aktuāls uz: 25.10.2026  
Pakalpojuma sniedzējs: PHP SOS, PHP ārkārtas palīdzība un serveru drošība. Tūlītēja palīdzība pa WhatsApp: https://wa.me/491736494914?text=Sveiki%2C%20PHP%20SOS%2C%20mums%20nepiecie%C5%A1ama%20pal%C4%ABdz%C4%ABba%20ar%20m%C5%ABsu%20PHP%20serveri.%20Uz%C5%86%C4%93mums%3A%20%E2%80%A6%20Vietne%3A%20%E2%80%A6

**Īsi:** Composer ir PHP pakotņu pārvaldnieks. No faila `composer.json` tas nolasa, kuras bibliotēkas projektam vajadzīgas, ielādē tās mapē `vendor`, precīzās versijas fiksē `composer.lock` un izveido autoloader, kas klases atrod automātiski. Composer tādējādi pārvalda jūsu lietojumprogrammas kodu, nevis pašu PHP interpretatoru: Composer atjauninājums ievainojamību PHP, piemēram, PHP2Shell, neaizver.

## Kas ir Composer un kam tas vajadzīgs?

Šodien reti kāda PHP lietojumprogramma sastāv tikai no paša koda. Ietvari, pasta bibliotēkas, PDF ģenerēšana vai maksājumu pieslēgumi nāk klāt kā gatavas pakotnes. Composer, PHP pakotņu pārvaldnieks, gādā, lai šīs pakotnes sanāktu kopā piemērotās versijās un lai katra atkarība līdzi atnestu savas atkarības.

Lēmumu pieņēmējiem tas nozīmē: liela daļa koda, kas darbojas jūsu serverī, nāk no trešajām pusēm. Tas ir efektīvi, taču prasa apkopi. Administratoriem un izstrādātājiem tas nozīmē: kas Composer lieto tīri, jebkurā brīdī var izsekot, kuras bibliotēkas kura versija darbojas ražošanā.

Standarta pakotņu avots saskaņā ar Composer dokumentāciju ir Packagist.org. Citus avotus, piemēram, aģentūras iekšējos repozitorijus, var ierakstīt `composer.json` sadaļā `repositories`.

## composer.json, composer.lock un vendor: trīs pamatelementi

Composer strādā ar trim lietām, kas jāzina, pirms pārņemat serveri vai uzdodat darbu aģentūrai.

| Elements | Saturs | Vai pieder repozitorijam? |
|---|---|---|
| `composer.json` | vēlamās pakotnes ar versiju diapazoniem (`require`, `require-dev`), autoload noteikumi, iestatījumi | jā |
| `composer.lock` | precīzi atrisinātas visu pakotņu versijas, arī netiešo | jā, saskaņā ar Composer dokumentāciju skaidri |
| `vendor/` | pakotņu lejupielādētais kods un izveidotais autoloader | nē, tiek izveidots instalējot |

Sadaļā `require` ir pakotnes, kas lietojumprogrammai vajadzīgas darbībā. Sadaļā `require-dev` ir izstrādes un testēšanas rīki, piemēram, testu ietvari vai statiskā analīze. Šis sadalījums ir svarīgs, jo izstrādes rīkiem ražošanas serverī nav vietas.

```json
{
    "require": {
        "php": ">=8.3",
        "monolog/monolog": "^3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^11.0"
    },
    "autoload": {
        "psr-4": { "App\\": "src/" }
    }
}
```

Versiju norādes piemērā izvēlētas tikai ilustrācijai. Kādas versijas jūsu projektam vajadzīgas, izriet no tā prasībām.

## install vai update: atšķirība darbībā

Abas komandas izklausās līdzīgi, bet to sekas ir ļoti atšķirīgas.

- `composer install` nolasa `composer.lock` un instalē tieši tur fiksētās versijas. Tas ir atkārtojami un pieder izvietošanai.
- `composer update` visas atkarības atrisina no jauna, ielādē jaunākās piemērotās versijas un pārraksta `composer.lock`. Tas pieder izstrādei, ar sekojošiem testiem.

Saskaņā ar Composer dokumentāciju `update` pēc lock faila ierakstīšanas papildus veic drošības pārbaudi (audit), ja tā nav izslēgta ar `--no-audit`. `install` pēc noklusējuma nepārbauda; tam ir opcija `--audit`.

## Autoloading: kā Composer atrod klases

Composer izveido failu `vendor/autoload.php`. Kad tas reiz ir iekļauts, PHP katru klasi ielādē tikai tad, kad tā vajadzīga. Savam kodam sadaļā `autoload` nosaka, kurš namespace atrodas kurā mapē. Šim nolūkam ieteicams PSR-4, PHP-FIG standarts. Kā tas darbojas precīzi, izskaidro lapa [Namespaces un autoloading](https://phpsos.de/lv/php/namespaces-autoloading/); pārskatu par visiem standartiem sniedz lapa [PSR standarti](https://phpsos.de/lv/php/psr-standards/).

```php
<?php
require __DIR__ . '/../vendor/autoload.php';

$log = new Monolog\Logger('app');   // pēc vajadzības tiek ielādēts automātiski
```

## Composer ražošanā: tīra izvietošana

Izvietošanai ir iesakņojusies fiksēta secība. Vislabāk tā darbojas būvēšanas konveijerā (build pipeline), nevis ar rokām serverī.

1. **Pārbaudīt lock failu:** `composer validate` nodrošina, ka `composer.json` ir derīgs un `composer.lock` aktuāls.
2. **Instalēt bez izstrādes pakotnēm:** `composer install --no-dev` izlaiž `require-dev`.
3. **Optimizēt autoloader:** `--optimize-autoloader` (īsi `-o`) noteikumus pārveido par klašu sarakstu. Ar `--classmap-authoritative` PHP klases ielādē tikai no šī saraksta.
4. **Drošības pārbaude:** `composer audit --locked` pārbauda lock failā esošās versijas pret zināmiem drošības ziņojumiem un ziņo par pamestām pakotnēm.
5. **vendor ārpus webroot:** Ar URL sasniedzamai jābūt tikai publiskajai mapei ar ieejas skriptu.

```bash
composer validate
composer install --no-dev --optimize-autoloader
composer audit --locked --no-dev
```

`composer outdated` papildus parāda, kurām instalētajām pakotnēm ir jaunākas versijas. Tas ir pamats plānotiem atjauninājumiem hektisku atsevišķu darbību vietā.

## Composer, drošība un PHP2Shell

Composer un PHP2Shell skar divus dažādus līmeņus. Ievainojamības CVE-2026-109618 un CVE-2026-109619 atrodas pašā PHP interpretatorā. Novērstas tās ir PHP 8.5.12, 8.4.27, 8.3.36 un 8.2.35, un pēc tam visi PHP procesi jāpārstartē. Neviens `composer update` un neviena pakotne mapē `vendor` to nemaina.

Tomēr Composer pieder katrai pārbaudei pēc incidenta. Kas serverī ienes ļaunprātīgu kodu, var mainīt arī failus mapē `vendor`, un `vendor/autoload.php` tiek ielādēts katrā pieprasījumā. Svaigs `composer install` no pārbaudītā lock faila tukšā direktorijā tāpēc ir laba metode, kā atjaunot pakotņu krājumu. Kā atkarības regulāri pārbaudīt uz zināmām ievainojamībām, apraksta ceļvedis [composer audit](https://phpsos.de/lv/ratgeber/composer-abhaengigkeiten-pruefen/).

> **Svarīgi:**
> Zaļš `composer audit` neko nesaka par PHP ielāpu stāvokli. Pārbaudiet PHP izpildes vidi atsevišķi, piemēram, ar mūsu [PHP ielāpošanas pakalpojumu](https://phpsos.de/lv/leistungen/php-patch-service/).

## Kā PHP SOS palīdz konkrēti?

- Mēs katrai lietojumprogrammai apzinām PHP versiju, Composer pakotnes un lock stāvokli un tīri nošķiram interpretatoru no bibliotēkām.
- Mēs pārbaudām, vai `vendor` un lock fails savstarpēji sakrīt un vai ražošanā nav izstrādes pakotņu vai mainītu failu.
- Mēs ieviešam atkārtojamu izvietošanu ar `install --no-dev`, optimizētu autoloader un auditu.
- Pēc incidenta mēs pakotņu krājumu atjaunojam no pārbaudītā lock faila un dokumentējam rezultātu.


## Biežāk uzdotie jautājumi

**Vai composer.lock jāliek Git repozitorijā?**  
Jā. Composer dokumentācija skaidri iesaka composer.lock iekļaut commit. Tikai tā izstrāde, CI un ražošana instalē tieši tās pašas pakotņu versijas.

**Kāda ir atšķirība starp composer install un composer update?**  
install instalē versijas, kas fiksētas composer.lock. update atkarības atrisina no jauna, ielādē piemērotas jaunākas versijas un pārraksta composer.lock. Ražošanas serverī vietā ir tikai install.

**Vai Composer atjauninājums aizver PHP2Shell ievainojamību?**  
Nē. Composer pārvalda jūsu lietojumprogrammas bibliotēkas, nevis PHP interpretatoru. PHP2Shell aizver tikai PHP izpildes vides atjauninājums uz labotu versiju un visu PHP procesu pārstartēšana.

**Kur jāatrodas vendor mapei?**  
Ideālā gadījumā ārpus publiski sasniedzamā tīmekļa direktorija. Daudzi ietvari tīmekļa saknē (webroot) novieto tikai public mapi, bet vendor atrodas par vienu līmeni augstāk.

## Avoti

- [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)
