Ī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 installnolasacomposer.lockun instalē tieši tur fiksētās versijas. Tas ir atkārtojami un pieder izvietošanai.composer updatevisas atkarības atrisina no jauna, ielādē jaunākās piemērotās versijas un pārrakstacomposer.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ī.
- Pārbaudīt lock failu:
composer validatenodrošina, kacomposer.jsonir derīgs uncomposer.lockaktuāls. - Instalēt bez izstrādes pakotnēm:
composer install --no-devizlaižrequire-dev. - Optimizēt autoloader:
--optimize-autoloader(īsi-o) noteikumus pārveido par klašu sarakstu. Ar--classmap-authoritativePHP klases ielādē tikai no šī saraksta. - Drošības pārbaude:
composer audit --lockedpārbauda lock failā esošās versijas pret zināmiem drošības ziņojumiem un ziņo par pamestām pakotnēm. - 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.
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
vendorun 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.