Aktuālā situācija: PHP2Shell. Divas kritiskas PHP ievainojamības (CVSS 9.2) ļauj izpildīt ļaunprātīgu kodu bez pieteikšanās. Ielāpi kopš 21.10.2026.Kas jādara tagad →

Composer: PHP pakotņu pārvaldnieks

Composer ielādē un pārvalda bibliotēkas, uz kurām balstās modernie PHP projekti. Kas saprot composer.json, composer.lock un autoloader, piegādā atkārtojami un drošāk.

Aktuāls uz 4 min lasīšanas laiksPHP zināšanas

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

{
    "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; pārskatu par visiem standartiem sniedz lapa PSR standarti.

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

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.

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

Tūlītējs kontakts

Katra stunda ir svarīga. Rakstiet mums tūlīt.

Īsi aprakstiet sistēmu, PHP versiju un novēroto. Mēs sazināsimies, noskaidrosim situāciju un strādāsim attālināti, līdz incidents ir slēgts un dokumentēts.

Tūlītēja palīdzība