# Razumevanje razširitev PHP (extensions)

> PHP Extensions razložene: razširitve core, bundled in PECL, extension in zend_extension, php -m in zakaj manj modulov pomeni več varnosti.

Vir: https://phpsos.de/sl/php/php-erweiterungen/  
Stanje: 25.10.2026  
Ponudnik: PHP SOS, Nujna pomoč za PHP in varnost strežnikov. Takojšnja pomoč po WhatsAppu: https://wa.me/491736494914?text=Pozdravljeni%2C%20PHP%20SOS%2C%20potrebujemo%20pomo%C4%8D%20z%20na%C5%A1im%20stre%C5%BEnikom%20PHP.%20Podjetje%3A%20%E2%80%A6%20Spletna%20stran%3A%20%E2%80%A6

**Na kratko:** Razširitve PHP (extensions) so moduli v jeziku C, ki PHP dopolnjujejo s funkcijami, na primer z gonilniki podatkovnih zbirk (PDO), šifriranjem (Sodium, OpenSSL) ali predpomnilnikom bajtne kode OPcache. Priročnik PHP razlikuje razširitve Core, Bundled, External in PECL. Naložijo se prek `extension` ali `zend_extension` v php.ini. Vsaka razširitev teče v procesu PHP z njegovimi pravicami. Zato velja: nalagajte samo, kar je potrebno, in jih posodabljajte skupaj s PHP.

## Kaj so razširitve PHP?

Jedro PHP, [Zend Engine](https://phpsos.de/sl/php/zend-engine/), zna izvajati kodo, a veliko tega, kar aplikacije potrebujejo, je v razširitvah. Napisane so v jeziku C in so bodisi trdno prevedene v PHP bodisi se ob zagonu naložijo kot skupna knjižnica (`.so` v Linuxu, `.dll` v sistemu Windows).

Za odločevalce je pomembno: razširitve niso vtičniki aplikacije, ampak del izvajalnega okolja PHP. Namesti jih ponudnik gostovanja ali skrbnik strežnika, ne agencija v CMS-ju. Če razširitve ni, aplikacija večinoma javi napako ob namestitvi ali posodobitvi.

Enako pomembna je razmejitev do paketov Composer. Composer namešča knjižnice, napisane v PHP, ki ležijo v mapi projekta, na primer paket za pošto ali PDF. Razširitve pa so prevedena koda, ki se naloži ob zagonu PHP in velja za vse aplikacije na strežniku. Številni paketi Composer predpostavljajo določene razširitve in to zapišejo v svoj `composer.json` z vnosi, kot sta `ext-intl` ali `ext-sodium`. Kdor želi preveriti, ali projekt najde vse potrebne razširitve, lahko v mapi projekta izvede `composer check-platform-reqs`.

## Katere vrste razširitev obstajajo?

Priročnik PHP razširitve razvršča v štiri skupine:

| Skupina | Pomen po priročniku | Primeri iz priročnika |
|---|---|---|
| Core | del jedra PHP, ni ga mogoče izklopiti | Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings |
| Bundled | dobavljene s PHP | BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions |
| External | dobavljene s PHP, potrebujejo zunanje knjižnice | cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip |
| PECL | na voljo prek PECL, deloma z zunanjimi knjižnicami | APCu, Memcached, MongoDB, Yaml |

Razvrstitev se lahko spremeni. S PHP 8.4 so bile po strani izdaje razširitve IMAP, OCI8, PDO_OCI in pspell odstranjene iz dobavljenega obsega in prestavljene v PECL. Kdor jih uporablja, po nadgradnji potrebuje ločeno namestitev, ki jo je prav tako treba vzdrževati.

## Kako se razširitve naložijo?

Skupne razširitve se po priročniku naložijo prek direktive `extension` v php.ini; razširitve Zend, ki globlje posegajo v engine, prek `zend_extension`. Obe smeta stati samo v php.ini. Imenik določa `extension_dir`, za kar priročnik priporoča absolutno pot.

```ini
; običajne razširitve
extension=pdo_mysql
extension=sodium
extension=intl

; razširitev Zend: OPcache (naložiti pred Xdebug, če sta aktivna oba)
zend_extension=opcache
```

Distribucije, kot sta Debian in Ubuntu, za vsako razširitev v imeniku za pregledovanje odložijo lastno majhno datoteko `.ini`, na primer pod `/etc/php/8.3/mods-available/`, in jih za vsak SAPI aktivirajo s `phpenmod` in `phpdismod`. Kako PHP te datoteke prebere, razlaga stran [php.ini razložena](https://phpsos.de/sl/php/php-ini-erklaert/).

Razširitve se večinoma namestijo prek upravljanja paketov, na primer kot paket `php8.3-intl`. Razširitve PECL je mogoče zgraditi s `pecl` ali `phpize`. Po priročniku je PECL opuščen; priporoča se PHP Installer for Extensions (PIE). Kdor PHP v celoti zgradi sam, najde namige na strani [Prevajanje PHP iz izvorne kode](https://phpsos.de/sl/php/php-kompilieren/).

## Preverjanje razširitev: katere so res naložene?

Naslednji ukazi so zgolj bralni. Upoštevajte, da ukazna vrstica lahko naloži druge razširitve kot spletna stran.

```bash
php -m                              # moduli CLI
php-fpm8.3 -m                       # moduli PHP-FPM 8.3 (ime je odvisno od distribucije)
php --re sodium | head -n 5         # funkcije razširitve
php --ri opcache                    # konfiguracija razširitve
php -r 'var_dump(extension_loaded("intl"));'
```

V kodi aplikacije z `extension_loaded()` preverjajo, ali razširitev obstaja, z `get_loaded_extensions()` pa, katere so naložene:

```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';
```

## Razširitve in varnost: manj je več

Razširitve tečejo v istem procesu kot PHP in z istimi pravicami. Napaka v razširitvi zato lahko tehta enako kot napaka v jedru. Iz tega izhajajo štiri pravila:

1. **Nalagati samo, kar je potrebno.** Vsaka dodatna razširitev poveča napadalno površino. Svoj seznam preverite glede na sistemske zahteve aplikacije.
2. **Posodabljati skupaj s PHP.** Zraven dobavljene razširitve pridejo s posodobitvijo PHP. Razširitve PECL in tuje razširitve potrebujejo lastne posodobitve in morajo ustrezati novi različici PHP.
3. **Razvojna orodja ne v produkcijo.** Razhroščevalniki in profilerji, kot je Xdebug, sodijo samo v razvojna okolja.
4. **Funkcije ciljno blokirati.** Kjer razširitve prinašajo funkcije za sistemske ukaze, pomaga [Pravilna uporaba disable_functions](https://phpsos.de/sl/ratgeber/disable-functions/).

Pri PHP2Shell ranljivosti ležita v jedru PHP, ne v razširitvi. Izklop modulov ju ne zapre; potrebna je posodobitev na 8.5.12, 8.4.27, 8.3.36 ali 8.2.35 s ponovnim zagonom vseh procesov PHP. Po posodobitvi preverite, ali so vse razširitve spet naložene, saj manjkajoči moduli pogosto izstopijo šele pri določenih funkcijah. Kako odvisnosti trajno obvladate, opisuje [Redno posodabljanje odvisnosti](https://phpsos.de/sl/blog/abhaengigkeiten-aktuell-halten/).

## Kako PHP SOS pomaga konkretno?

- **Zajem stanja:** za vsak SAPI naštejemo vse naložene razširitve z izvorom in različico.
- **Čiščenje:** seznam uskladimo s potrebami vaše aplikacije in po preizkusu deaktiviramo odvečno.
- **Posodabljanje:** v okviru [utrjevanja strežnika](https://phpsos.de/sl/leistungen/server-haertung/) PHP in vse tuje razširitve spravimo na vzdrževano stanje.
- **Preverjanje po posodobitvah:** preverimo, da so po vsaki posodobitvi PHP spet naloženi vsi potrebni moduli.


## Pogosta vprašanja

**Kakšna je razlika med extension in zend_extension?**  
Z extension PHP naloži običajne razširitve, kot so gonilniki podatkovnih zbirk. Z zend_extension se po priročniku naložijo razširitve Zend, ki globlje posegajo v engine, na primer OPcache ali Xdebug. Obe direktivi smeta stati samo v php.ini.

**Kako vidim, katere razširitve so naložene?**  
V ukazni vrstici s php -m, za spletno stran pa s funkcijo get_loaded_extensions() v kratek čas odloženi preizkusni datoteki ali s php-fpm -m posamezne različice. Upoštevajte, da lahko CLI in spletni SAPI naložita različne razširitve.

**Kaj je PECL in kaj PIE?**  
PECL je imenik razširitev PHP, ki so na voljo prek sistema paketov PEAR. Po priročniku PHP je PECL opuščen; namesto njega se priporoča PHP Installer for Extensions (PIE).

**Ali izklop razširitve zapre PHP2Shell?**  
Ne. Ranljivosti PHP2Shell ležita v jedru PHP, ne v razširitvi, ki bi jo bilo mogoče izklopiti. Manj razširitev na splošno zmanjša napadalno površino, a ne nadomešča posodobitve na popravljeno različico.

## Viri

- [Priročnik PHP: pripadnost razširitev](https://www.php.net/manual/en/extensions.membership.php)
- [Priročnik PHP: namestitev razširitev PECL](https://www.php.net/manual/en/install.pecl.intro.php)
- [Priročnik PHP: osnovne nastavitve (extension)](https://www.php.net/manual/en/ini.core.php)
- [php.net: izdaja PHP 8.4](https://www.php.net/releases/8.4/en.php)
