# Förstå PHP-tillägg (extensions)

> PHP Extensions förklarat: Core-, Bundled- och PECL-tillägg, extension och zend_extension, php -m och varför färre moduler är säkrare.

Källa: https://phpsos.de/sv/php/php-erweiterungen/  
Aktualitet: 2026-10-25  
Leverantör: PHP SOS, PHP-nödhjälp och serversäkerhet. Omedelbar hjälp via WhatsApp: https://wa.me/491736494914?text=Hej%20PHP%20SOS%2C%20vi%20beh%C3%B6ver%20hj%C3%A4lp%20med%20v%C3%A5r%20PHP-server.%20F%C3%B6retag%3A%20%E2%80%A6%20Webbplats%3A%20%E2%80%A6

**Kort sagt:** PHP-tillägg (extensions) är moduler i C som utökar PHP med funktioner, till exempel databasdrivrutiner (PDO), kryptering (Sodium, OpenSSL) eller bytekodcachen OPcache. PHP-manualen skiljer mellan Core-, Bundled-, External- och PECL-tillägg. De laddas via `extension` eller `zend_extension` i php.ini. Varje tillägg körs i PHP-processen med dess rättigheter. Därför gäller: ladda bara det som behövs och uppdatera tillsammans med PHP.

## Vad är PHP Extensions?

PHP:s kärna, [Zend Engine](https://phpsos.de/sv/php/zend-engine/), kan köra kod, men mycket av det som applikationer behöver finns i tillägg. De är skrivna i C och kompileras antingen fast in i PHP eller laddas vid start som delat bibliotek (`.so` under Linux, `.dll` under Windows).

Viktigt för beslutsfattare: Tillägg är inga plugin i applikationen utan en del av PHP-körmiljön. De installeras av webbhotellet eller serveradministratören, inte av byrån i CMS:et. Saknas ett tillägg rapporterar applikationen oftast ett fel vid installation eller uppdatering.

Lika viktig är avgränsningen mot Composer-paket. Composer installerar bibliotek som är skrivna i PHP och ligger i projektmappen, till exempel ett e-post- eller PDF-paket. Tillägg är däremot kompilerad kod som laddas när PHP startar och gäller för alla applikationer på servern. Många Composer-paket förutsätter vissa tillägg och noterar det i sin `composer.json` med poster som `ext-intl` eller `ext-sodium`. Den som vill kontrollera att ett projekt har alla nödvändiga tillägg kan köra `composer check-platform-reqs` i projektmappen.

## Vilka typer av tillägg finns?

PHP-manualen delar in tilläggen i fyra grupper:

| Grupp | Betydelse enligt manualen | Exempel ur manualen |
|---|---|---|
| Core | del av PHP:s kärna, kan inte stängas av | Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings |
| Bundled | levereras med PHP | BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions |
| External | levereras med PHP, kräver externa bibliotek | cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip |
| PECL | tillgängliga via PECL, delvis med externa bibliotek | APCu, Memcached, MongoDB, Yaml |

Tillhörigheten kan ändras. Med PHP 8.4 togs enligt releasesidan tilläggen IMAP, OCI8, PDO_OCI och pspell bort ur leveransen och flyttades till PECL. Den som använder dem behöver efter uppgraderingen en separat installation, som också måste underhållas.

## Hur laddas tillägg?

Delade tillägg laddas enligt manualen via direktivet `extension` i php.ini; Zend-tillägg, som ingriper djupare i motorn, via `zend_extension`. Båda får bara stå i php.ini. Katalogen fastställs av `extension_dir`, för vilken manualen rekommenderar en absolut sökväg.

```ini
; vanliga tillägg
extension=pdo_mysql
extension=sodium
extension=intl

; Zend-tillägg: OPcache (ladda före Xdebug om båda är aktiva)
zend_extension=opcache
```

Distributioner som Debian och Ubuntu lägger för varje tillägg en egen liten `.ini`-fil i skanningskatalogen, till exempel under `/etc/php/8.3/mods-available/`, och aktiverar dem per SAPI med `phpenmod` och `phpdismod`. Hur PHP läser in de här filerna förklaras i [php.ini förklarad](https://phpsos.de/sv/php/php-ini-erklaert/).

Tillägg installeras oftast via pakethanteringen, till exempel som paketet `php8.3-intl`. PECL-tillägg kan byggas med `pecl` eller `phpize`. Enligt manualen är PECL utfasat; i stället rekommenderas PHP Installer for Extensions (PIE). Den som bygger PHP helt själv hittar tips under [Kompilera PHP från källkod](https://phpsos.de/sv/php/php-kompilieren/).

## Kontrollera tillägg: vilka är verkligen laddade?

Följande kommandon är rent läsande. Observera att kommandoraden kan ladda andra tillägg än webbplatsen.

```bash
php -m                              # CLI:s moduler
php-fpm8.3 -m                       # PHP-FPM 8.3:s moduler (namn beroende på distribution)
php --re sodium | head -n 5         # funktioner i ett tillägg
php --ri opcache                    # konfiguration för ett tillägg
php -r 'var_dump(extension_loaded("intl"));'
```

I koden kontrollerar applikationer med `extension_loaded()` om ett tillägg finns och med `get_loaded_extensions()` vilka som är laddade:

```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';
```

## Tillägg och säkerhet: färre är bättre

Tillägg körs i samma process som PHP och med samma rättigheter. Ett fel i ett tillägg kan därför väga lika tungt som ett fel i kärnan. Därav följer fyra regler:

1. **Ladda bara det som behövs.** Varje extra tillägg ökar angreppsytan. Kontrollera er lista mot applikationens systemkrav.
2. **Uppdatera tillsammans med PHP.** Medföljande tillägg kommer med PHP-uppdateringen. PECL- och tredjepartstillägg behöver egna uppdateringar och måste passa till den nya PHP-versionen.
3. **Inga utvecklingsverktyg i produktion.** Felsökare och profilerare som Xdebug hör bara hemma i utvecklingsmiljöer.
4. **Spärra funktioner riktat.** Där tillägg medför funktioner för systemkommandon hjälper [Använda disable_functions rätt](https://phpsos.de/sv/ratgeber/disable-functions/).

Vid PHP2Shell ligger sårbarheterna i PHP:s kärna, inte i ett tillägg. Att stänga av moduler täpper inte till dem; det som behövs är uppdateringen till 8.5.12, 8.4.27, 8.3.36 eller 8.2.35 med omstart av alla PHP-processer. Efter uppdateringen bör ni kontrollera att alla tillägg laddas igen, eftersom saknade moduler ofta märks först vid vissa funktioner. Hur ni håller beroenden under kontroll långsiktigt beskrivs i [Hålla beroenden aktuella](https://phpsos.de/sv/blog/abhaengigkeiten-aktuell-halten/).

## Hur hjälper PHP SOS konkret?

- **Kartlägga beståndet:** Vi listar per SAPI alla laddade tillägg med ursprung och version.
- **Rensa ut:** Vi jämför listan med er applikations behov och avaktiverar överflödigt efter test.
- **Uppdatera:** Inom ramen för [serverhärdning](https://phpsos.de/sv/leistungen/server-haertung/) för vi PHP och alla tredjepartstillägg till ett underhållet läge.
- **Kontrollera efter uppdateringar:** Vi kontrollerar att alla nödvändiga moduler är laddade igen efter varje PHP-uppdatering.


## Vanliga frågor

**Vad är skillnaden mellan extension och zend_extension?**  
Med extension laddar PHP vanliga tillägg som databasdrivrutiner. Med zend_extension laddas enligt manualen Zend-tillägg som ingriper djupare i motorn, till exempel OPcache eller Xdebug. Båda direktiven får bara stå i php.ini.

**Hur ser jag vilka tillägg som är laddade?**  
På kommandoraden med php -m, för webbplatsen via funktionen get_loaded_extensions() i en kortvarig kontrollfil eller via php-fpm -m för respektive version. Observera att CLI och webb-SAPI kan ladda olika tillägg.

**Vad är PECL och vad är PIE?**  
PECL är en katalog över PHP-tillägg som tillhandahålls via paketsystemet PEAR. Enligt PHP-manualen är PECL utfasat; i stället rekommenderas PHP Installer for Extensions (PIE).

**Täpper avstängning av ett tillägg till PHP2Shell?**  
Nej. PHP2Shell-sårbarheterna ligger i PHP:s kärna, inte i ett tillägg som kan stängas av. Färre tillägg minskar angreppsytan i allmänhet men ersätter inte uppdateringen till en rättad version.

## Källor

- [PHP-manualen: tilläggens tillhörighet](https://www.php.net/manual/en/extensions.membership.php)
- [PHP-manualen: installera PECL-tillägg](https://www.php.net/manual/en/install.pecl.intro.php)
- [PHP-manualen: kärninställningar (extension)](https://www.php.net/manual/en/ini.core.php)
- [php.net: PHP 8.4-releasen](https://www.php.net/releases/8.4/en.php)
