Actuele situatie: PHP2Shell. Twee kritieke PHP-kwetsbaarheden (CVSS 9.2) maken schadelijke code zonder inloggen mogelijk. Patches sinds 21-10-2026.Wat u nu moet doen →

SAPI uitgelegd: hoe PHP met de webserver praat

De SAPI is de interface tussen PHP en webserver. Ze bepaalt hoe verzoeken binnenkomen, welke php.ini geldt en wat na een update opnieuw moet starten.

Stand 5 min. leestijdPHP-kennis

Kort gezegd: SAPI staat voor Server Application Programming Interface, de interface waarmee PHP met zijn omgeving praat. Typische SAPI's zijn fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed en cli voor de opdrachtregel. De SAPI bepaalt hoe verzoeken binnenkomen, welke php.ini geldt en welke processen na een update opnieuw moeten starten. Bij PHP2Shell hangt zelfs de risico-indeling ervan af.

Wat is een SAPI?

PHP zelf is een programma dat code uitvoert. Om webpagina's te kunnen uitleveren heeft het een verbinding nodig met een webserver, met de opdrachtregel of met een andere toepassing. Die verbinding is de SAPI. Ze neemt verzoekgegevens aan, geeft ze door aan de Zend Engine en geeft de uitvoer terug.

Je kunt je de SAPI voorstellen als een stekker: de motor blijft gelijk, maar al naar gelang de stekker past hij op Apache, op Nginx via FastCGI, op LiteSpeed of op de terminal. Elke variant heeft eigen sterke punten, eigen configuratiewegen en eigen valkuilen.

De SAPI beslist vooral over drie zaken die in de praktijk tellen:

  1. Procesmodel: Draait PHP in de webserver, als eigen dienst met permanente workers of als kortlevend proces per aanroep?
  2. Configuratie: Welke php.ini wordt gelezen, en waar mogen extra instellingen staan, bijvoorbeeld in .htaccess, in een .user.ini of in de FPM-pool?
  3. Rechten en scheiding: Onder welke gebruiker draait de code, en kunnen meerdere websites van elkaar worden gescheiden?

In hostingpanelen duiken SAPI's onder andere namen op. Plesk spreekt bijvoorbeeld van PHP-handlers zoals „FPM application”, „FastCGI application” of „Apache module”. Bedoeld zijn dezelfde uitvoeringsmodi die deze pagina beschrijft. In geval van twijfel helpt het testbestand verderop, dat de werkelijke SAPI-naam toont.

Welke PHP-SAPI's bestaan er?

De PHP-handleiding noemt voor php_sapi_name() onder meer deze retourwaarden: apache, apache2handler, cgi (tot PHP 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed en phpdbg. De lijst is uitdrukkelijk niet limitatief.

SAPI-naam Uitvoeringsmodus Typische toepassing Procesmodel
fpm-fcgi PHP-FPM Nginx, Apache met proxy_fcgi, hostingpanelen eigen dienst met workerpools
apache2handler mod_php oudere Apache-servers, eenvoudige Docker-images PHP in het Apache-proces
cgi-fcgi php-cgi oude installaties, sommige Windows-opstellingen proces per verzoek of FastCGI
litespeed LSAPI LiteSpeed-webserver, veel shared hosters eigen PHP-processen
cli opdrachtregel cronjobs, Composer, onderhoudsscripts één proces per aanroep
cli-server ingebouwde webserver alleen lokale ontwikkeling (php -S) een ontwikkelserver
embed ingebed PHP in andere programma's afhankelijk van het programma
phpdbg debugger foutopsporing interactief

FrankenPHP is een moderne toepassingsserver die PHP direct inbedt. Hij is eveneens door PHP2Shell getroffen en heeft eigen updatewegen; details onder FrankenPHP beveiligen.

Zo controleert u de SAPI van uw server

De SAPI van een website komt u alleen via de webserver te weten, niet via de opdrachtregel. Een klein testbestand volstaat:

<?php
// sapi-check.php: direct na de aanroep weer verwijderen
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

Op de opdrachtregel zijn de geïnstalleerde varianten en diensten uitsluitend lezend vast te stellen:

php -r 'echo PHP_SAPI, PHP_EOL;'          # altijd "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # geïnstalleerde FPM-versies
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # mod_php geladen?

Waarom elke SAPI zijn eigen php.ini kan hebben

Volgens de PHP-handleiding zoekt PHP eerst naar een bestand php-SAPI.ini, dus bijvoorbeeld php-cli.ini, en pas daarna naar php.ini. Distributies zoals Debian en Ubuntu gaan verder en maken per SAPI eigen mappen aan, bijvoorbeeld /etc/php/8.3/fpm/ en /etc/php/8.3/cli/.

Ook het tijdstip verschilt: bij servermodules leest PHP de configuratie volgens de handleiding maar één keer bij het starten van de webserver, bij CGI en CLI bij elke aanroep. Wie een instelling wijzigt, moet daarom weten welke SAPI het betreft. Meer daarover onder De php.ini uitgelegd.

SAPI en beveiliging: wat PHP2Shell heeft laten zien

Door PHP2Shell zijn volgens de meldingen PHP-FPM, Apache met mod_php, php-cgi, FrankenPHP en LiteSpeed getroffen. Het PHP-team schat het risico bij mod_php het hoogst in, omdat daar een exploit is gedemonstreerd voordat toepassingscode draait. De redenen staan onder Waarom mod_php het hoogste risico draagt.

Voor de bedrijfsvoering betekent de SAPI vooral één ding: ze bepaalt wat na de update opnieuw moet starten.

  1. PHP-FPM: alle pools en workers van elke geïnstalleerde versie
  2. mod_php: de volledige Apache-dienst, niet alleen een reload
  3. php-cgi en FastCGI-opstellingen: alle resterende PHP-processen
  4. LiteSpeed: de PHP-processen van de webserver volgens de handleiding van de leverancier
  5. CLI: geen permanente processen, maar het pakket wel meebijwerken, zodat controles kloppen

Op middellange termijn loont de overstap weg van mod_php. De PHP-handleiding adviseert voor nieuwe Apache-installaties PHP-FPM met mod_proxy_fcgi. De basis beschrijft PHP-FPM uitgelegd.

Hoe helpt PHP SOS concreet?

  • SAPI's in kaart brengen: Wij stellen voor elke server vast welke uitvoeringsmodi en PHP-versies daadwerkelijk actief zijn.
  • Juist herstarten: Via de PHP-patchservice werken wij elke SAPI bij en leggen we de herstart van alle processen vast.
  • Configuratie toewijzen: Wij laten zien welke php.ini en welke poolinstellingen voor uw website gelden.
  • Overstap plannen: Waar mod_php of php-cgi draait, plannen en testen wij de overstap naar PHP-FPM.

Veelgestelde vragen

Hoe ontdek ik welke SAPI mijn website gebruikt?

Het betrouwbaarst met een kortstondig geplaatst testbestand dat PHP_SAPI of php_sapi_name() uitgeeft, aangeroepen via de webserver. Op de opdrachtregel krijgt u altijd cli, dat zegt niets over de website. Verwijder het testbestand daarna meteen.

Welke SAPI is de veiligste?

Geen enkele is uit zichzelf veilig. PHP-FPM biedt echter de meeste middelen voor scheiding: eigen pools, gebruikers en vergrendelde instellingen per website. De PHP-handleiding adviseert voor nieuwe Apache-installaties uitdrukkelijk PHP-FPM in plaats van mod_php.

Is de opdrachtregelversie van PHP door PHP2Shell getroffen?

De bekende meldingen noemen PHP-FPM, mod_php, php-cgi, FrankenPHP en LiteSpeed. De CLI verwerkt geen verzoeken uit het netwerk. Ze komt echter meestal uit dezelfde pakketbron en moet altijd mee worden bijgewerkt, alleen al zodat controleopdrachten de juiste stand tonen.

Kan een server meerdere SAPI's tegelijk gebruiken?

Ja, dat is zelfs gebruikelijk. Vrijwel elke server heeft naast de web-SAPI de CLI voor cronjobs en onderhoud. Vaak draaien bovendien meerdere PHP-FPM-versies naast elkaar. Elk daarvan moet afzonderlijk worden bijgewerkt en opnieuw gestart.

Bronnen

Direct contact

Elk uur telt. Schrijf ons nu.

Beschrijf kort het systeem, de PHP-versie en wat u opmerkt. Wij nemen contact op, brengen de situatie in kaart en werken op afstand tot het incident is afgerond en gedocumenteerd.

Directe hulp