Aktuel situation: PHP2Shell. To kritiske PHP-sårbarheder (CVSS 9,2) tillader skadelig kode uden login. Rettelser siden 21.10.2026.Hvad der skal gøres nu →

SAPI forklaret: sådan taler PHP med webserveren

SAPI er grænsefladen mellem PHP og webserver. Den afgør, hvordan forespørgsler ankommer, hvilken php.ini der gælder, og hvad der skal genstartes efter en opdatering.

Status 4 min. læsetidPHP-viden

Kort sagt: SAPI står for Server Application Programming Interface, den grænseflade, som PHP taler med sine omgivelser igennem. Typiske SAPI'er er fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed og cli til kommandolinjen. SAPI'en afgør, hvordan forespørgsler ankommer, hvilken php.ini der gælder, og hvilke processer der skal genstartes efter en opdatering. Ved PHP2Shell afhænger endda risikoklassificeringen af den.

Hvad er en SAPI?

PHP selv er et program, der udfører kode. For at kunne levere websider har det brug for en forbindelse til en webserver, til kommandolinjen eller til en anden applikation. Denne forbindelse er SAPI'en. Den modtager forespørgselsdata, giver dem videre til Zend Engine og returnerer outputtet.

Man kan forestille sig SAPI'en som et stik: Motoren forbliver den samme, men alt efter stikket passer den til Apache, til Nginx via FastCGI, til LiteSpeed eller til terminalen. Hver variant har egne styrker, egne konfigurationsveje og egne faldgruber.

SAPI'en afgør først og fremmest tre ting, som tæller i hverdagen:

  1. Procesmodel: Kører PHP inde i webserveren, som egen tjeneste med vedvarende workere eller som kortlivet proces pr. kald?
  2. Konfiguration: Hvilken php.ini læses, og hvor må yderligere indstillinger stå, f.eks. i .htaccess, i en .user.ini eller i FPM-poolen?
  3. Rettigheder og adskillelse: Under hvilken bruger kører koden, og kan flere websites adskilles fra hinanden?

I hosting-paneler dukker SAPI'er op under andre navne. Plesk taler f.eks. om PHP-handlere som "FPM application", "FastCGI application" eller "Apache module". Der menes de samme driftsformer, som denne side beskriver. Er I i tvivl, hjælper kontrolfilen længere nede, som viser det faktiske SAPI-navn.

Hvilke PHP-SAPI'er findes der?

PHP-manualen nævner til php_sapi_name() blandt andet disse returværdier: apache, apache2handler, cgi (til og med PHP 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed og phpdbg. Listen er udtrykkeligt ikke udtømmende.

SAPI-navn Driftsform Typisk anvendelse Procesmodel
fpm-fcgi PHP-FPM Nginx, Apache med proxy_fcgi, hosting-paneler egen tjeneste med worker-pools
apache2handler mod_php ældre Apache-servere, simple Docker-images PHP i Apache-processen
cgi-fcgi php-cgi gamle installationer, nogle Windows-opsætninger proces pr. forespørgsel eller FastCGI
litespeed LSAPI LiteSpeed-webserver, mange shared-hostere egne PHP-processer
cli kommandolinje cronjobs, Composer, vedligeholdelsesscripts én proces pr. kald
cli-server indbygget webserver kun lokal udvikling (php -S) en udviklingsserver
embed indlejret PHP i andre programmer afhænger af programmet
phpdbg debugger fejlfinding interaktiv

FrankenPHP er en moderne applikationsserver, der indlejrer PHP direkte. Den er ligeledes berørt af PHP2Shell og har egne opdateringsveje; detaljer under Sikring af FrankenPHP.

Sådan kontrollerer I jeres servers SAPI

En hjemmesides SAPI får I kun at vide via webserveren, ikke via kommandolinjen. En lille kontrolfil er nok:

<?php
// sapi-check.php: slet igen straks efter kaldet
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

På kommandolinjen kan de installerede varianter og tjenester registreres læsende:

php -r 'echo PHP_SAPI, PHP_EOL;'          # altid "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # installerede FPM-versioner
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # mod_php indlæst?

Hvorfor hver SAPI kan have sin egen php.ini

Ifølge PHP-manualen leder PHP først efter en fil php-SAPI.ini, altså f.eks. php-cli.ini, og først derefter efter php.ini. Distributioner som Debian og Ubuntu går videre og opretter egne mapper pr. SAPI, f.eks. /etc/php/8.3/fpm/ og /etc/php/8.3/cli/.

Tidspunktet er også forskelligt: Ved servermoduler læser PHP ifølge manualen konfigurationen kun én gang, når webserveren starter, ved CGI og CLI ved hvert kald. Den, der ændrer en indstilling, skal derfor vide, hvilken SAPI der er berørt. Mere herom under php.ini forklaret.

SAPI og sikkerhed: hvad PHP2Shell har vist

Af PHP2Shell er ifølge meddelelserne PHP-FPM, Apache med mod_php, php-cgi, FrankenPHP og LiteSpeed berørt. PHP-teamet vurderer risikoen ved mod_php som den højeste, fordi der dér blev vist en exploit, før applikationskode kører. Begrundelserne står under Hvorfor mod_php bærer den højeste risiko.

For driften betyder SAPI'en først og fremmest én ting: Den afgør, hvad der skal genstartes efter opdateringen.

  1. PHP-FPM: alle pools og workere i hver installeret version
  2. mod_php: hele Apache-tjenesten, ikke blot en reload
  3. php-cgi og FastCGI-opsætninger: alle tilbageværende PHP-processer
  4. LiteSpeed: webserverens PHP-processer efter leverandørens vejledning
  5. CLI: ingen vedvarende processer, men opdatér pakken med, så kontroller passer

På mellemlang sigt kan et skift væk fra mod_php betale sig. PHP-manualen anbefaler til nye Apache-installationer PHP-FPM med mod_proxy_fcgi. Grundlaget beskriver PHP-FPM forklaret.

Hvordan hjælper PHP SOS konkret?

  • Kortlægge SAPI'er: Vi finder for hver server ud af, hvilke driftsformer og PHP-versioner der faktisk er aktive.
  • Genstarte korrekt: Via PHP-patchservicen opdaterer vi hver SAPI og dokumenterer genstarten af alle processer.
  • Henføre konfiguration: Vi viser, hvilken php.ini og hvilke pool-indstillinger der gælder for jeres website.
  • Planlægge skiftet: Hvor mod_php eller php-cgi kører, planlægger og tester vi skiftet til PHP-FPM.

Ofte stillede spørgsmål

Hvordan finder jeg ud af, hvilken SAPI min hjemmeside bruger?

Mest pålideligt med en kortvarigt lagt kontrolfil, der udskriver PHP_SAPI eller php_sapi_name(), kaldt via webserveren. På kommandolinjen får I altid cli, og det siger intet om hjemmesiden. Slet derefter kontrolfilen straks.

Hvilken SAPI er den sikreste?

Ingen er sikker i sig selv. PHP-FPM tilbyder dog de fleste værktøjer til adskillelse: egne pools, brugere og låste indstillinger pr. website. PHP-manualen anbefaler udtrykkeligt PHP-FPM frem for mod_php til nye Apache-installationer.

Er kommandolinjeversionen berørt af PHP2Shell?

De kendte meddelelser nævner PHP-FPM, mod_php, php-cgi, FrankenPHP og LiteSpeed. CLI behandler ingen forespørgsler fra nettet. Den stammer dog som regel fra den samme pakkekilde og bør altid opdateres med, allerede for at kontrolkommandoer viser den rigtige status.

Kan en server bruge flere SAPI'er samtidig?

Ja, det er endda almindeligt. Næsten enhver server har ved siden af web-SAPI'en CLI til cronjobs og vedligeholdelse. Ofte kører der desuden flere PHP-FPM-versioner parallelt. Hver af dem skal opdateres og genstartes for sig.

Kilder

Akut kontakt

Hver time tæller. Skriv til os nu.

Beskriv kort system, PHP-version og observation. Vi vender tilbage, afklarer situationen og arbejder på afstand, indtil hændelsen er afsluttet og dokumenteret.

Akut hjælp