Aktuellt läge: PHP2Shell. Två kritiska PHP-sårbarheter (CVSS 9,2) tillåter skadlig kod utan inloggning. Patchar sedan den 21 oktober 2026.Vad som bör göras nu →

SAPI förklarat: så pratar PHP med webbservern

SAPI är gränssnittet mellan PHP och webbservern. Det avgör hur förfrågningar kommer in, vilken php.ini som gäller och vad som måste startas om efter en uppdatering.

Aktualitet 4 min läsningPHP-kunskap

Kort sagt: SAPI står för Server Application Programming Interface, gränssnittet genom vilket PHP talar med sin omgivning. Typiska SAPI är fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed och cli för kommandoraden. SAPI:t avgör hur förfrågningar kommer in, vilken php.ini som gäller och vilka processer som måste startas om efter en uppdatering. Vid PHP2Shell beror till och med riskbedömningen på det.

Vad är en SAPI?

PHP är i sig ett program som kör kod. För att kunna leverera webbsidor behöver det en förbindelse med en webbserver, med kommandoraden eller med ett annat program. Den förbindelsen är SAPI. Den tar emot förfrågningsdata, för dem vidare till Zend Engine och lämnar tillbaka utdata.

Man kan tänka sig SAPI som en kontakt: Motorn är densamma, men beroende på kontakt passar den till Apache, till Nginx via FastCGI, till LiteSpeed eller till terminalen. Varje variant har egna styrkor, egna konfigurationsvägar och egna fallgropar.

SAPI avgör framför allt tre saker som spelar roll i vardagen:

  1. Processmodell: Körs PHP i webbservern, som egen tjänst med permanenta workers eller som kortlivad process per anrop?
  2. Konfiguration: Vilken php.ini läses, och var får ytterligare inställningar stå, till exempel i .htaccess, i en .user.ini eller i FPM-poolen?
  3. Rättigheter och åtskillnad: Under vilken användare körs koden, och går det att hålla flera webbplatser åtskilda?

I hostingpaneler dyker SAPI upp under andra namn. Plesk talar till exempel om PHP-hanterare som ”FPM application”, ”FastCGI application” eller ”Apache module”. Det som avses är samma driftlägen som den här sidan beskriver. Vid tvekan hjälper kontrollfilen längre ned, som visar det faktiska SAPI-namnet.

Vilka PHP-SAPI finns?

PHP-manualen nämner för php_sapi_name() bland annat dessa returvärden: apache, apache2handler, cgi (till och med PHP 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed och phpdbg. Listan är uttryckligen inte uttömmande.

SAPI-namn Driftläge Typisk användning Processmodell
fpm-fcgi PHP-FPM Nginx, Apache med proxy_fcgi, hostingpaneler egen tjänst med worker-pooler
apache2handler mod_php äldre Apache-servrar, enkla Docker-avbilder PHP i Apache-processen
cgi-fcgi php-cgi äldre installationer, vissa Windows-miljöer process per förfrågan eller FastCGI
litespeed LSAPI LiteSpeed-webbservern, många delade webbhotell egna PHP-processer
cli kommandorad cronjobb, Composer, underhållsskript en process per anrop
cli-server inbyggd webbserver bara lokal utveckling (php -S) en utvecklingsserver
embed inbäddad PHP i andra program beror på programmet
phpdbg felsökare felsökning interaktiv

FrankenPHP är en modern applikationsserver som bäddar in PHP direkt. Den berörs också av PHP2Shell och har egna uppdateringsvägar; detaljer under Säkra FrankenPHP.

Så kontrollerar ni SAPI på er server

En webbplats SAPI får ni bara fram via webbservern, inte via kommandoraden. En liten kontrollfil räcker:

<?php
// sapi-check.php: ta bort genast efter anropet
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

På kommandoraden kan de installerade varianterna och tjänsterna kartläggas enbart läsande:

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

Varför varje SAPI kan ha sin egen php.ini

Enligt PHP-manualen söker PHP först efter en fil php-SAPI.ini, alltså till exempel php-cli.ini, och först därefter efter php.ini. Distributioner som Debian och Ubuntu går längre och skapar egna mappar per SAPI, till exempel /etc/php/8.3/fpm/ och /etc/php/8.3/cli/.

Även tidpunkten skiljer sig: Med servermoduler läser PHP enligt manualen konfigurationen bara en gång vid webbserverns start, med CGI och CLI vid varje anrop. Den som ändrar en inställning måste därför veta vilket SAPI som berörs. Mer om detta under php.ini förklarad.

SAPI och säkerhet: vad PHP2Shell har visat

Enligt rapporterna berörs PHP-FPM, Apache med mod_php, php-cgi, FrankenPHP och LiteSpeed av PHP2Shell. PHP-teamet bedömer risken som högst vid mod_php, eftersom en exploit visades där innan applikationskod körs. Skälen står under Varför mod_php bär den högsta risken.

För driften betyder SAPI framför allt en sak: Det avgör vad som måste startas om efter uppdateringen.

  1. PHP-FPM: alla pooler och workers i varje installerad version
  2. mod_php: hela Apache-tjänsten, inte bara en reload
  3. php-cgi och FastCGI-miljöer: alla kvarvarande PHP-processer
  4. LiteSpeed: webbserverns PHP-processer enligt leverantörens anvisning
  5. CLI: inga permanenta processer, men uppdatera paketet med så att kontrollerna stämmer

På medellång sikt lönar sig bytet bort från mod_php. PHP-manualen rekommenderar PHP-FPM med mod_proxy_fcgi för nya Apache-installationer. Grunderna beskrivs i PHP-FPM förklarat.

Hur hjälper PHP SOS konkret?

  • Kartlägga SAPI: Vi tar reda på vilka driftlägen och PHP-versioner som faktiskt är aktiva på varje server.
  • Starta om rätt: Via PHP-patchtjänsten uppdaterar vi varje SAPI och styrker omstarten av alla processer.
  • Koppla konfigurationen: Vi visar vilken php.ini och vilka poolinställningar som gäller för er webbplats.
  • Planera bytet: Där mod_php eller php-cgi körs planerar och testar vi bytet till PHP-FPM.

Vanliga frågor

Hur tar jag reda på vilken SAPI min webbplats använder?

Mest tillförlitligt med en kortvarigt utlagd kontrollfil som skriver ut PHP_SAPI eller php_sapi_name(), anropad via webbservern. På kommandoraden får ni alltid cli, och det säger inget om webbplatsen. Ta sedan genast bort kontrollfilen.

Vilken SAPI är säkrast?

Ingen är säker i sig. PHP-FPM har dock flest verktyg för åtskillnad: egna pooler, användare och låsta inställningar per webbplats. PHP-manualen rekommenderar uttryckligen PHP-FPM i stället för mod_php för nya Apache-installationer.

Berörs kommandoradsversionen av PHP2Shell?

De kända rapporterna nämner PHP-FPM, mod_php, php-cgi, FrankenPHP och LiteSpeed. CLI bearbetar inga förfrågningar från nätet. Den kommer dock oftast från samma paketkälla och bör alltid uppdateras med, redan för att kontrollkommandon ska visa rätt version.

Kan en server använda flera SAPI samtidigt?

Ja, det är till och med vanligt. Nästan varje server har vid sidan av webb-SAPI:t även CLI för cronjobb och underhåll. Ofta körs dessutom flera PHP-FPM-versioner parallellt. Var och en måste uppdateras och startas om för sig.

Källor

Direktkontakt

Varje timme räknas. Skriv till oss nu.

Beskriv kort system, PHP-version och observation. Vi hör av oss, klarlägger läget och arbetar på distans tills incidenten är avslutad och dokumenterad.

Direkthjälp