# PHP laiendused (extensions) mõistetavalt

> PHP laiendused selgitatud: Core-, Bundled- ja PECL-laiendused, extension ja zend_extension, php -m ning miks vähem mooduleid on turvalisem.

Allikas: https://phpsos.de/et/php/php-erweiterungen/  
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:** PHP laiendused (extensions) on C-keeles moodulid, mis täiendavad PHP-d funktsioonidega, näiteks andmebaasidraiverid (PDO), krüpteerimine (Sodium, OpenSSL) või baitkoodi vahemälu OPcache. PHP käsiraamat eristab Core-, Bundled-, External- ja PECL-laiendusi. Laaditakse need failis php.ini direktiividega `extension` või `zend_extension`. Iga laiendus töötab PHP protsessis selle õigustega. Seetõttu kehtib: laadige ainult see, mida vaja, ja uuendage koos PHP-ga.

## Mis on PHP laiendused?

PHP tuum, [Zend Engine](https://phpsos.de/et/php/zend-engine/), oskab koodi käivitada, kuid paljud rakenduste vajatav asub laiendustes. Need on kirjutatud C-keeles ja kas kompileeritakse PHP sisse kindlalt või laaditakse käivitamisel jagatud teegina (`.so` Linuxis, `.dll` Windowsis).

Otsustajale on oluline: laiendused ei ole rakenduse pistikprogrammid, vaid PHP käitusaja osa. Neid paigaldab veebimajutaja või serveri administraator, mitte agentuur CMS-is. Kui laiendus puudub, teatab rakendus tavaliselt veast paigaldamisel või uuendamisel.

Sama oluline on piiritlemine Composeri pakettidest. Composer paigaldab teeke, mis on kirjutatud PHP-s ja asuvad projektikaustas, näiteks meili- või PDF-pakett. Laiendused seevastu on kompileeritud kood, mis laaditakse PHP käivitamisel ja kehtib kõigi serveri rakenduste jaoks. Paljud Composeri paketid eeldavad teatud laiendusi ja märgivad selle oma `composer.json` failis kirjetega nagu `ext-intl` või `ext-sodium`. Kes tahab kontrollida, kas projekt leiab kõik vajalikud laiendused, saab projektikaustas käivitada `composer check-platform-reqs`.

## Millised laienduste liigid on olemas?

PHP käsiraamat jaotab laiendused nelja rühma:

| Rühm | Tähendus käsiraamatu järgi | Näited käsiraamatust |
|---|---|---|
| Core | PHP tuuma osa, ei saa välja lülitada | Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings |
| Bundled | tarnitakse PHP-ga | BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions |
| External | tarnitakse PHP-ga, vajavad väliseid teeke | cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip |
| PECL | saadaval PECL-i kaudu, osaliselt väliste teekidega | APCu, Memcached, MongoDB, Yaml |

Jaotus võib muutuda. PHP 8.4-ga eemaldati väljalaskelehe järgi laiendused IMAP, OCI8, PDO_OCI ja pspell tarnekomplektist ning viidi PECL-i. Kes neid kasutab, vajab pärast uuendust eraldi paigaldust, mida tuleb samuti hooldada.

## Kuidas laiendusi laaditakse?

Jagatud laiendusi laaditakse käsiraamatu järgi failis php.ini direktiiviga `extension`; Zend-laiendusi, mis sekkuvad mootorisse sügavamalt, direktiiviga `zend_extension`. Mõlemad tohivad olla ainult failis php.ini. Kataloogi määrab `extension_dir`, mille jaoks käsiraamat soovitab absoluutset teed.

```ini
; tavalised laiendused
extension=pdo_mysql
extension=sodium
extension=intl

; Zend-laiendus: OPcache (laadida enne Xdebugi, kui mõlemad on aktiivsed)
zend_extension=opcache
```

Distributsioonid nagu Debian ja Ubuntu paigutavad iga laienduse jaoks oma väikese `.ini` faili skannimiskataloogi, näiteks asukohta `/etc/php/8.3/mods-available/`, ning aktiveerivad selle SAPI kaupa käskudega `phpenmod` ja `phpdismod`. Kuidas PHP neid faile sisse loeb, selgitab [php.ini selgitus](https://phpsos.de/et/php/php-ini-erklaert/).

Paigaldatakse laiendusi enamasti paketihalduse kaudu, näiteks paketina `php8.3-intl`. PECL laiendusi saab ehitada käskudega `pecl` või `phpize`. Käsiraamatu järgi on PECL kasutuselt kõrvaldatud; soovitatakse PHP Installer for Extensions'it (PIE). Kes ehitab PHP-d täielikult ise, leiab vihjeid lehelt [PHP kompileerimine lähtekoodist](https://phpsos.de/et/php/php-kompilieren/).

## Laienduste kontroll: millised on tegelikult laaditud?

Järgmised käsud on puhtalt lugevad. Arvestage, et käsurida võib laadida teisi laiendusi kui veebisait.

```bash
php -m                              # CLI moodulid
php-fpm8.3 -m                       # PHP-FPM 8.3 moodulid (nimi sõltub distributsioonist)
php --re sodium | head -n 5         # laienduse funktsioonid
php --ri opcache                    # laienduse seadistus
php -r 'var_dump(extension_loaded("intl"));'
```

Koodis kontrollivad rakendused funktsiooniga `extension_loaded()`, kas laiendus on olemas, ja funktsiooniga `get_loaded_extensions()`, millised on laaditud:

```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';
```

## Laiendused ja turvalisus: vähem on rohkem

Laiendused töötavad samas protsessis kui PHP ja samade õigustega. Laienduse viga võib seetõttu olla sama raske kui tuumas olev viga. Sellest tulenevad neli reeglit:

1. **Laadige ainult see, mida vaja.** Iga lisalaiendus suurendab ründepinda. Kontrollige oma loetelu rakenduse süsteeminõuete vastu.
2. **Uuendage koos PHP-ga.** Kaasa antud laiendused tulevad PHP uuendusega. PECL ja kolmandate osapoolte laiendused vajavad oma uuendusi ja peavad sobima uue PHP versiooniga.
3. **Arendustööriistad mitte tootmisse.** Siluri- ja profiilitööriistad nagu Xdebug kuuluvad ainult arenduskeskkondadesse.
4. **Funktsioone sihipäraselt lukustada.** Kus laiendused toovad kaasa süsteemikäskude funktsioone, aitab [disable_functions õige kasutamine](https://phpsos.de/et/ratgeber/disable-functions/).

PHP2Shelli puhul asuvad augud PHP tuumas, mitte laiendis. Moodulite väljalülitamine neid ei sulge; vajalik on uuendus versioonile 8.5.12, 8.4.27, 8.3.36 või 8.2.35 koos kõigi PHP protsesside taaskäivitusega. Pärast uuendust peaksite kontrollima, kas kõik laiendused on jälle laaditud, sest puuduvad moodulid jäävad sageli märkamatuks kuni teatud funktsioonideni. Kuidas sõltuvusi püsivalt kontrolli all hoida, kirjeldab [Sõltuvuste ajakohasena hoidmine](https://phpsos.de/et/blog/abhaengigkeiten-aktuell-halten/).

## Kuidas PHP SOS konkreetselt aitab?

- **Koosseisu kaardistamine:** Loetleme SAPI kaupa kõik laaditud laiendused koos päritolu ja versiooniga.
- **Väljakoristamine:** Sobitame loetelu teie rakenduse vajadusega ja deaktiveerime üleliigse pärast testi.
- **Uuendamine:** [Serveri karastamise](https://phpsos.de/et/leistungen/server-haertung/) raames viime PHP ja kõik kolmandate osapoolte laiendused hooldatud seisu.
- **Kontroll pärast uuendusi:** Kontrollime, et pärast iga PHP uuendust on kõik vajalikud moodulid jälle laaditud.


## Korduma kippuvad küsimused

**Mis vahe on extension'il ja zend_extension'il?**  
Direktiiviga extension laadib PHP tavalisi laiendusi nagu andmebaasidraiverid. Direktiiviga zend_extension laaditakse käsiraamatu järgi Zend-laiendusi, mis sekkuvad mootorisse sügavamalt, näiteks OPcache või Xdebug. Mõlemad direktiivid tohivad olla ainult failis php.ini.

**Kuidas ma näen, millised laiendused on laaditud?**  
Käsureal käsuga php -m, veebisaidi jaoks funktsiooniga get_loaded_extensions() ajutises kontrollifailis või vastava versiooni käsuga php-fpm -m. Arvestage, et CLI ja veebi-SAPI võivad laadida erinevaid laiendusi.

**Mis on PECL ja mis on PIE?**  
PECL on PHP laienduste register, mida pakutakse PEAR paketisüsteemi kaudu. PHP käsiraamatu järgi on PECL kasutuselt kõrvaldatud; soovitatakse hoopis PHP Installer for Extensions'it (PIE).

**Kas laienduse väljalülitamine sulgeb PHP2Shelli?**  
Ei. PHP2Shelli augud asuvad PHP tuumas, mitte väljalülitatavas laiendis. Vähem laiendusi vähendab ründepinda üldiselt, kuid ei asenda uuendust parandatud versioonile.

## Allikad

- [PHP käsiraamat: laienduste kuuluvus](https://www.php.net/manual/en/extensions.membership.php)
- [PHP käsiraamat: PECL laienduste paigaldamine](https://www.php.net/manual/en/install.pecl.intro.php)
- [PHP käsiraamat: tuumasätted (extension)](https://www.php.net/manual/en/ini.core.php)
- [php.net: PHP 8.4 väljalase](https://www.php.net/releases/8.4/en.php)
