# PHP-extensies (extensions) begrijpen

> PHP-extensies uitgelegd: core-, bundled- en PECL-extensies, extension en zend_extension, php -m en waarom minder modules veiliger is.

Bron: https://phpsos.de/nl/php/php-erweiterungen/  
Stand: 25-10-2026  
Aanbieder: PHP SOS, PHP-noodhulp en serverbeveiliging. Directe hulp via WhatsApp: https://wa.me/491736494914?text=Hallo%20PHP%20SOS%2C%20wij%20hebben%20hulp%20nodig%20met%20onze%20PHP-server.%20Bedrijf%3A%20%E2%80%A6%20Website%3A%20%E2%80%A6

**Kort gezegd:** PHP-extensies (extensions) zijn modules in C die PHP uitbreiden met functies, bijvoorbeeld databasestuurprogramma's (PDO), versleuteling (Sodium, OpenSSL) of de bytecodecache OPcache. De PHP-handleiding onderscheidt core-, bundled-, external- en PECL-extensies. Ze worden geladen via `extension` of `zend_extension` in de php.ini. Elke extensie draait in het PHP-proces met de rechten daarvan. Daarom geldt: alleen laden wat nodig is en samen met PHP bijwerken.

## Wat zijn PHP-extensies?

De kern van PHP, de [Zend Engine](https://phpsos.de/nl/php/zend-engine/), kan code uitvoeren, maar veel van wat toepassingen nodig hebben zit in extensies. Ze zijn in C geschreven en worden ofwel vast in PHP ingecompileerd, ofwel als gedeelde bibliotheek (`.so` onder Linux, `.dll` onder Windows) bij het starten geladen.

Belangrijk voor beslissers: extensies zijn geen plug-ins van de toepassing, maar onderdeel van de PHP-runtime. Ze worden door de hoster of serverbeheerder geïnstalleerd, niet door het bureau in het CMS. Ontbreekt een extensie, dan meldt de toepassing meestal een fout bij de installatie of bij de update.

Even belangrijk is de afbakening ten opzichte van Composer-pakketten. Composer installeert bibliotheken die in PHP zijn geschreven en in de projectmap staan, bijvoorbeeld een mail- of pdf-pakket. Extensies daarentegen zijn gecompileerde code die bij het starten van PHP wordt geladen en voor alle toepassingen op de server geldt. Veel Composer-pakketten veronderstellen bepaalde extensies en vermelden dat in hun `composer.json` met vermeldingen als `ext-intl` of `ext-sodium`. Wie wil controleren of een project alle benodigde extensies aantreft, kan in de projectmap `composer check-platform-reqs` uitvoeren.

## Welke soorten extensies zijn er?

De PHP-handleiding deelt extensies in vier groepen in:

| Groep | Betekenis volgens de handleiding | Voorbeelden uit de handleiding |
|---|---|---|
| Core | deel van de PHP-kern, niet uit te schakelen | Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings |
| Bundled | met PHP meegeleverd | BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions |
| External | met PHP meegeleverd, hebben externe bibliotheken nodig | cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip |
| PECL | verkrijgbaar via PECL, deels met externe bibliotheken | APCu, Memcached, MongoDB, Yaml |

De indeling kan veranderen. Met PHP 8.4 zijn volgens de releasepagina de extensies IMAP, OCI8, PDO_OCI en pspell uit de standaardlevering verwijderd en naar PECL verplaatst. Wie ze gebruikt, heeft na de upgrade een aparte installatie nodig, die eveneens onderhouden moet worden.

## Hoe worden extensies geladen?

Gedeelde extensies worden volgens de handleiding via de directive `extension` in de php.ini geladen; Zend-extensies die dieper in de engine ingrijpen via `zend_extension`. Beide mogen alleen in de php.ini staan. De map bepaalt `extension_dir`, waarvoor de handleiding een absoluut pad adviseert.

```ini
; gewone extensies
extension=pdo_mysql
extension=sodium
extension=intl

; Zend-extensie: OPcache (vóór Xdebug laden, indien beide actief)
zend_extension=opcache
```

Distributies als Debian en Ubuntu plaatsen voor elke extensie een eigen klein `.ini`-bestand in de scanmap, bijvoorbeeld onder `/etc/php/8.3/mods-available/`, en activeren het per SAPI met `phpenmod` en `phpdismod`. Hoe PHP deze bestanden inleest, legt [De php.ini uitgelegd](https://phpsos.de/nl/php/php-ini-erklaert/) uit.

Geïnstalleerd worden extensies meestal via het pakketbeheer, bijvoorbeeld als pakket `php8.3-intl`. PECL-extensies zijn met `pecl` of `phpize` te bouwen. Volgens de handleiding is PECL afgekeurd; aanbevolen wordt de PHP Installer for Extensions (PIE). Wie PHP volledig zelf bouwt, vindt aanwijzingen onder [PHP uit de broncode compileren](https://phpsos.de/nl/php/php-kompilieren/).

## Extensies controleren: welke zijn echt geladen?

De volgende opdrachten zijn uitsluitend lezend. Houd er rekening mee dat de opdrachtregel andere extensies kan laden dan de website.

```bash
php -m                              # modules van de CLI
php-fpm8.3 -m                       # modules van PHP-FPM 8.3 (naam per distributie)
php --re sodium | head -n 5         # functies van een extensie
php --ri opcache                    # configuratie van een extensie
php -r 'var_dump(extension_loaded("intl"));'
```

In de code controleren toepassingen met `extension_loaded()` of een extensie aanwezig is en met `get_loaded_extensions()` welke zijn geladen:

```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';
```

## Extensies en beveiliging: minder is meer

Extensies draaien in hetzelfde proces als PHP en met dezelfde rechten. Een fout in een extensie kan daarom even zwaar wegen als een fout in de kern. Daaruit volgen vier regels:

1. **Alleen laden wat nodig is.** Elke extra extensie vergroot het aanvalsoppervlak. Controleer uw lijst aan de hand van de systeemvereisten van de toepassing.
2. **Samen met PHP bijwerken.** Meegeleverde extensies komen met de PHP-update. PECL- en externe extensies hebben eigen updates nodig en moeten bij de nieuwe PHP-versie passen.
3. **Ontwikkelhulpmiddelen niet in productie.** Debuggers en profilers als Xdebug horen alleen in ontwikkelomgevingen.
4. **Functies gericht blokkeren.** Waar extensies functies voor systeemopdrachten meebrengen, helpt [disable_functions juist inzetten](https://phpsos.de/nl/ratgeber/disable-functions/).

Bij PHP2Shell zitten de lekken in de kern van PHP, niet in een extensie. Het uitschakelen van modules sluit ze niet; nodig is de update naar 8.5.12, 8.4.27, 8.3.36 of 8.2.35 met een herstart van alle PHP-processen. Na de update moet u controleren of alle extensies weer worden geladen, want ontbrekende modules vallen vaak pas bij bepaalde functies op. Hoe u afhankelijkheden duurzaam onder controle houdt, beschrijft [Afhankelijkheden actueel houden](https://phpsos.de/nl/blog/abhaengigkeiten-aktuell-halten/).

## Hoe helpt PHP SOS concreet?

- **Bestand in kaart brengen:** Wij sommen per SAPI alle geladen extensies op met herkomst en versie.
- **Uitmesten:** Wij vergelijken de lijst met de behoefte van uw toepassing en schakelen overbodige zaken na een test uit.
- **Bijwerken:** In het kader van de [serverhardening](https://phpsos.de/nl/leistungen/server-haertung/) brengen wij PHP en alle externe extensies op een onderhouden stand.
- **Na updates controleren:** Wij controleren dat na elke PHP-update alle benodigde modules weer zijn geladen.


## Veelgestelde vragen

**Wat is het verschil tussen extension en zend_extension?**  
Met extension laadt PHP gewone extensies zoals databasestuurprogramma's. Met zend_extension worden volgens de handleiding Zend-extensies geladen die dieper in de engine ingrijpen, bijvoorbeeld OPcache of Xdebug. Beide directives mogen alleen in de php.ini staan.

**Hoe zie ik welke extensies zijn geladen?**  
Op de opdrachtregel met php -m, voor de website via de functie get_loaded_extensions() in een kortstondig testbestand of via php-fpm -m van de betreffende versie. Houd er rekening mee dat CLI en web-SAPI verschillende extensies kunnen laden.

**Wat is PECL en wat is PIE?**  
PECL is een register van PHP-extensies die via het PEAR-pakketsysteem worden aangeboden. Volgens de PHP-handleiding is PECL afgekeurd; aanbevolen wordt in plaats daarvan de PHP Installer for Extensions (PIE).

**Sluit het uitschakelen van een extensie PHP2Shell?**  
Nee. De PHP2Shell-lekken zitten in de kern van PHP, niet in een uit te schakelen extensie. Minder extensies verkleinen het aanvalsoppervlak in het algemeen, maar vervangen de update naar een verholpen versie niet.

## Bronnen

- [PHP-handleiding: indeling van de extensies](https://www.php.net/manual/en/extensions.membership.php)
- [PHP-handleiding: PECL-extensies installeren](https://www.php.net/manual/en/install.pecl.intro.php)
- [PHP-handleiding: kerninstellingen (extension)](https://www.php.net/manual/en/ini.core.php)
- [php.net: PHP 8.4 release](https://www.php.net/releases/8.4/en.php)
