# PHP plėtiniai (extensions) paaiškinti

> PHP plėtiniai paaiškinti: Core, Bundled ir PECL plėtiniai, extension ir zend_extension, php -m ir kodėl mažiau modulių yra saugiau.

Šaltinis: https://phpsos.de/lt/php/php-erweiterungen/  
Būsena: 2026-10-25  
Teikėjas: PHP SOS, PHP avarinė pagalba ir serverio sauga. Skubi pagalba per „WhatsApp“: https://wa.me/491736494914?text=Sveiki%2C%20PHP%20SOS%2C%20mums%20reikia%20pagalbos%20su%20m%C5%ABs%C5%B3%20PHP%20serveriu.%20%C4%AEmon%C4%97%3A%20%E2%80%A6%20Svetain%C4%97%3A%20%E2%80%A6

**Trumpai:** PHP plėtiniai (extensions) yra C kalba parašyti moduliai, papildantys PHP funkcijomis, pavyzdžiui, duomenų bazių tvarkyklėmis (PDO), šifravimu (Sodium, OpenSSL) ar baitkodo talpykla OPcache. PHP vadovas skiria Core, Bundled, External ir PECL plėtinius. Jie įkeliami per `extension` arba `zend_extension` php.ini. Kiekvienas plėtinys veikia PHP procese su jo teisėmis. Todėl galioja: įkelti tik tai, ko reikia, ir atnaujinti kartu su PHP.

## Kas yra PHP plėtiniai?

PHP branduolys, [Zend Engine](https://phpsos.de/lt/php/zend-engine/), gali vykdyti kodą, bet daug to, ko reikia programoms, slypi plėtiniuose. Jie parašyti C kalba ir arba tiesiogiai sukompiliuojami į PHP, arba paleidžiant įkeliami kaip bendrai naudojama biblioteka (`.so` sistemoje Linux, `.dll` sistemoje Windows).

Sprendimų priėmėjams svarbu: plėtiniai nėra programos papildiniai, o PHP vykdymo aplinkos dalis. Juos įdiegia hostingo teikėjas ar serverio administratorius, o ne agentūra CMS. Jei plėtinio trūksta, programa dažniausiai praneša apie klaidą diegiant ar atnaujinant.

Taip pat svarbus skirtumas nuo Composer paketų. Composer diegia bibliotekas, parašytas PHP kalba ir esančias projekto aplanke, pavyzdžiui, pašto ar PDF paketą. Plėtiniai, priešingai, yra sukompiliuotas kodas, kuris įkeliamas paleidžiant PHP ir galioja visoms serverio programoms. Daugeliui Composer paketų reikalingi tam tikri plėtiniai, ir tai jie nurodo savo `composer.json` įrašais, tokiais kaip `ext-intl` ar `ext-sodium`. Kas nori patikrinti, ar projektas randa visus reikiamus plėtinius, projekto aplanke gali vykdyti `composer check-platform-reqs`.

## Kokių rūšių plėtinių būna?

PHP vadovas plėtinius skiria į keturias grupes:

| Grupė | Reikšmė pagal vadovą | Pavyzdžiai iš vadovo |
|---|---|---|
| Core | PHP branduolio dalis, neišjungiama | Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings |
| Bundled | pateikiami kartu su PHP | BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions |
| External | pateikiami kartu su PHP, reikia išorinių bibliotekų | cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip |
| PECL | prieinami per PECL, kai kurie su išorinėmis bibliotekomis | APCu, Memcached, MongoDB, Yaml |

Priskyrimas gali keistis. Su PHP 8.4, pasak leidimo puslapio, plėtiniai IMAP, OCI8, PDO_OCI ir pspell išimti iš komplekto ir perkelti į PECL. Kas juos naudoja, po atnaujinimo turi atskirai įdiegti, o tai taip pat reikia prižiūrėti.

## Kaip plėtiniai įkeliami?

Pasak vadovo, bendrai naudojami plėtiniai įkeliami per direktyvą `extension` php.ini; Zend plėtiniai, giliau veikiantys variklį, per `zend_extension`. Abu gali būti tik php.ini. Katalogą nustato `extension_dir`, kuriam vadovas rekomenduoja absoliutų kelią.

```ini
; įprasti plėtiniai
extension=pdo_mysql
extension=sodium
extension=intl

; Zend plėtinys: OPcache (įkelti prieš Xdebug, jei aktyvūs abu)
zend_extension=opcache
```

Distribucijos, tokios kaip Debian ir Ubuntu, kiekvienam plėtiniui nuskaitymo kataloge sukuria atskirą mažą `.ini` failą, pavyzdžiui, `/etc/php/8.3/mods-available/`, ir jį kiekvienai SAPI aktyvuoja su `phpenmod` ir `phpdismod`. Kaip PHP šiuos failus nuskaito, paaiškina [php.ini paaiškinta](https://phpsos.de/lt/php/php-ini-erklaert/).

Plėtiniai dažniausiai diegiami per paketų valdymą, pavyzdžiui, kaip paketas `php8.3-intl`. PECL plėtinius galima sukompiliuoti su `pecl` ar `phpize`. Pasak vadovo, PECL paskelbtas pasenusiu; rekomenduojamas PHP Installer for Extensions (PIE). Kas PHP kompiliuoja visiškai pats, pastabų ras skyriuje [PHP kompiliavimas iš pirminio kodo](https://phpsos.de/lt/php/php-kompilieren/).

## Plėtinių patikra: kurie tikrai įkelti?

Toliau pateiktos komandos yra grynai skaitančios. Atminkite, kad komandinė eilutė gali įkelti kitus plėtinius nei svetainė.

```bash
php -m                              # CLI moduliai
php-fpm8.3 -m                       # PHP-FPM 8.3 moduliai (pavadinimas priklauso nuo distribucijos)
php --re sodium | head -n 5         # plėtinio funkcijos
php --ri opcache                    # plėtinio konfigūracija
php -r 'var_dump(extension_loaded("intl"));'
```

Kode programos su `extension_loaded()` tikrina, ar plėtinys yra, o su `get_loaded_extensions()`, kurie įkelti:

```php
<?php
$benoetigt = ['pdo_mysql', 'mbstring', 'intl', 'sodium'];
$fehlend = array_diff($benoetigt, array_map('strtolower', get_loaded_extensions()));
echo $fehlend ? 'Fehlt: ' . implode(', ', $fehlend) : 'Alle Erweiterungen vorhanden';
```

## Plėtiniai ir saugumas: mažiau yra daugiau

Plėtiniai veikia tame pačiame procese kaip PHP ir su tomis pačiomis teisėmis. Todėl plėtinio klaida gali būti tokia pat sunki kaip branduolio klaida. Iš to kyla keturios taisyklės:

1. **Įkelti tik tai, ko reikia.** Kiekvienas papildomas plėtinys didina atakos paviršių. Savo sąrašą patikrinkite pagal programos sistemos reikalavimus.
2. **Atnaujinti kartu su PHP.** Kartu pateikiami plėtiniai ateina su PHP atnaujinimu. PECL ir trečiųjų šalių plėtiniams reikia savų atnaujinimų ir jie turi tikti naujajai PHP versijai.
3. **Kūrimo įrankių ne gamyboje.** Derintuvai ir profiliuokliai, tokie kaip Xdebug, priklauso tik kūrimo aplinkoms.
4. **Funkcijas užrakinti tikslingai.** Kur plėtiniai atneša funkcijas sistemos komandoms, padeda [disable_functions teisingas naudojimas](https://phpsos.de/lt/ratgeber/disable-functions/).

Esant PHP2Shell, spragos yra PHP branduolyje, o ne plėtinyje. Modulių išjungimas jų neuždaro; reikia atnaujinimo iki 8.5.12, 8.4.27, 8.3.36 ar 8.2.35 su visų PHP procesų paleidimu iš naujo. Po atnaujinimo reikėtų patikrinti, ar vėl įkelti visi plėtiniai, nes trūkstami moduliai dažnai paaiškėja tik naudojant tam tikras funkcijas. Kaip priklausomybes nuolat išlaikyti tvarkingas, aprašo [Priklausomybių atnaujinimas](https://phpsos.de/lt/blog/abhaengigkeiten-aktuell-halten/).

## Kaip PHP SOS padeda konkrečiai?

- **Inventorizacija:** kiekvienai SAPI išvardijame visus įkeltus plėtinius su kilme ir versija.
- **Išretinimas:** sąrašą suderiname su jūsų programos poreikiu ir po bandymo išjungiame nereikalingus.
- **Atnaujinimas:** [serverio sutvirtinimo](https://phpsos.de/lt/leistungen/server-haertung/) rėmuose PHP ir visus trečiųjų šalių plėtinius pakeliame į prižiūrimą būseną.
- **Patikra po atnaujinimų:** tikriname, kad po kiekvieno PHP atnaujinimo vėl įkelti visi reikalingi moduliai.


## Dažni klausimai

**Kuo skiriasi extension ir zend_extension?**  
Su extension PHP įkelia įprastus plėtinius, pavyzdžiui, duomenų bazių tvarkykles. Su zend_extension, pasak vadovo, įkeliami Zend plėtiniai, kurie giliau veikia variklį, pavyzdžiui, OPcache ar Xdebug. Abi direktyvos gali būti tik php.ini.

**Kaip pamatyti, kurie plėtiniai įkelti?**  
Komandinėje eilutėje su php -m, svetainei per funkciją get_loaded_extensions() trumpam patalpintame patikros faile arba per atitinkamos versijos php-fpm -m. Atminkite, kad CLI ir žiniatinklio SAPI gali įkelti skirtingus plėtinius.

**Kas yra PECL ir kas yra PIE?**  
PECL yra PHP plėtinių katalogas, teikiamas per PEAR paketų sistemą. Pasak PHP vadovo, PECL paskelbtas pasenusiu; vietoj jo rekomenduojamas PHP Installer for Extensions (PIE).

**Ar išjungus plėtinį užsidaro PHP2Shell?**  
Ne. PHP2Shell spragos yra PHP branduolyje, o ne išjungiamame plėtinyje. Mažiau plėtinių apskritai sumažina atakos paviršių, bet neatstoja atnaujinimo į ištaisytą versiją.

## Šaltiniai

- [PHP vadovas: plėtinių priklausomybė](https://www.php.net/manual/en/extensions.membership.php)
- [PHP vadovas: PECL plėtinių diegimas](https://www.php.net/manual/en/install.pecl.intro.php)
- [PHP vadovas: pagrindiniai nustatymai (extension)](https://www.php.net/manual/en/ini.core.php)
- [php.net: PHP 8.4 leidimas](https://www.php.net/releases/8.4/en.php)
