Aktuální situace: PHP2Shell. Dvě kritické zranitelnosti PHP (CVSS 9.2) umožňují spustit škodlivý kód bez přihlášení. Záplaty od 21. 10. 2026.Co nyní udělat →

SAPI vysvětleno: jak PHP komunikuje s webovým serverem

SAPI je rozhraní mezi PHP a webovým serverem. Určuje, jak požadavky přicházejí, který php.ini platí a co se musí po aktualizaci restartovat.

Stav 4 min čteníZnalosti o PHP

Stručně: SAPI znamená Server Application Programming Interface, tedy rozhraní, přes které PHP komunikuje se svým okolím. Typická SAPI jsou fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed a cli pro příkazovou řádku. SAPI určuje, jak požadavky přicházejí, který php.ini platí a které procesy je po aktualizaci nutné restartovat. U PHP2Shell na tom závisí dokonce i zařazení rizika.

Co je SAPI?

PHP samo je program, který provádí kód. Aby mohlo vydávat webové stránky, potřebuje spojení s webovým serverem, s příkazovou řádkou nebo s jinou aplikací. Toto spojení je SAPI. Přijímá data požadavku, předává je do Zend Engine a vrací výstup.

SAPI si lze představit jako zástrčku: motor zůstává stejný, ale podle zástrčky zapadá do Apache, do Nginx přes FastCGI, do LiteSpeed nebo do terminálu. Každá varianta má vlastní přednosti, vlastní cesty konfigurace a vlastní úskalí.

SAPI rozhoduje především o třech věcech, které jsou v každodenním provozu důležité:

  1. Procesní model: Běží PHP ve webovém serveru, jako samostatná služba s trvalými workery, nebo jako krátkodobý proces pro každé volání?
  2. Konfigurace: Který php.ini se čte a kde smějí být dodatečná nastavení, například v .htaccess, v .user.ini nebo v poolu FPM?
  3. Oprávnění a oddělení: Pod kterým uživatelem kód běží a lze od sebe oddělit více webů?

V hostingových panelech se SAPI objevují pod jinými názvy. Plesk například mluví o obslužných programech PHP (handlerech) jako „FPM application“, „FastCGI application“ nebo „Apache module“. Míněny jsou tytéž provozní režimy, které tato stránka popisuje. V případě pochybností pomůže kontrolní soubor níže, který zobrazí skutečný název SAPI.

Která SAPI v PHP existují?

Příručka PHP uvádí pro php_sapi_name() mimo jiné tyto návratové hodnoty: apache, apache2handler, cgi (do PHP 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed a phpdbg. Seznam výslovně není úplný.

Název SAPI Provozní režim Typické nasazení Procesní model
fpm-fcgi PHP-FPM Nginx, Apache s proxy_fcgi, hostingové panely samostatná služba s pooly workerů
apache2handler mod_php starší servery Apache, jednoduché image Dockeru PHP v procesu Apache
cgi-fcgi php-cgi starší instalace, některá nastavení ve Windows proces pro každý požadavek nebo FastCGI
litespeed LSAPI webový server LiteSpeed, mnoho sdílených hostingů vlastní procesy PHP
cli příkazová řádka úlohy cron, Composer, skripty údržby jeden proces pro každé volání
cli-server vestavěný webový server jen lokální vývoj (php -S) jeden vývojový server
embed vložené PHP v jiných programech závisí na programu
phpdbg debugger hledání chyb interaktivní

FrankenPHP je moderní aplikační server, který PHP vkládá přímo do sebe. Také jej PHP2Shell postihuje a má vlastní cesty aktualizace; podrobnosti v článku Zabezpečení FrankenPHP.

Jak zjistit SAPI svého serveru

SAPI webu zjistíte jen přes webový server, nikoli přes příkazovou řádku. Stačí malý kontrolní soubor:

<?php
// sapi-check.php: po zavolání ihned zase smazat
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

V příkazové řádce lze nainstalované varianty a služby zjistit jen pro čtení:

php -r 'echo PHP_SAPI, PHP_EOL;'          # vždy "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # nainstalované verze FPM
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # načten mod_php?

Proč může mít každé SAPI svůj php.ini

Podle příručky PHP hledá PHP nejdříve soubor php-SAPI.ini, tedy například php-cli.ini, a teprve potom php.ini. Distribuce jako Debian a Ubuntu jdou dál a zakládají pro každé SAPI samostatné adresáře, například /etc/php/8.3/fpm/ a /etc/php/8.3/cli/.

Liší se i okamžik: u serverových modulů čte PHP konfiguraci podle příručky jen jednou při spuštění webového serveru, u CGI a CLI při každém volání. Kdo mění nastavení, musí proto vědět, kterého SAPI se týká. Více v článku php.ini vysvětlen.

SAPI a bezpečnost: co ukázal PHP2Shell

Podle hlášení postihuje PHP2Shell PHP-FPM, Apache s mod_php, php-cgi, FrankenPHP a LiteSpeed. Tým PHP hodnotí riziko u mod_php nejvýše, protože tam byl předveden exploit dříve, než se spustí kód aplikace. Důvody najdete v článku Proč nese mod_php nejvyšší riziko.

Pro provoz znamená SAPI především jedno: určuje, co se po aktualizaci musí restartovat.

  1. PHP-FPM: všechny pooly a workery každé nainstalované verze
  2. mod_php: celá služba Apache, nikoli jen reload
  3. php-cgi a nastavení FastCGI: všechny zbývající procesy PHP
  4. LiteSpeed: procesy PHP webového serveru podle návodu výrobce
  5. CLI: žádné trvalé procesy, ale balíček také aktualizovat, aby kontroly souhlasily

Ve střednědobém horizontu se vyplatí odejít od mod_php. Příručka PHP doporučuje pro nové instalace Apache PHP-FPM s mod_proxy_fcgi. Základy popisuje článek PHP-FPM vysvětleno.

Jak konkrétně pomáhá PHP SOS?

  • Zmapovat SAPI: Pro každý server zjistíme, jaké provozní režimy a verze PHP jsou skutečně aktivní.
  • Restartovat správně: Prostřednictvím služby PHP-Patch aktualizujeme každé SAPI a doložíme restart všech procesů.
  • Přiřadit konfiguraci: Ukážeme, který php.ini a která nastavení poolu pro váš web platí.
  • Naplánovat přechod: Tam, kde běží mod_php nebo php-cgi, naplánujeme a otestujeme přechod na PHP-FPM.

Časté dotazy

Jak zjistím, které SAPI můj web používá?

Nejspolehlivěji pomocí krátce nahraného kontrolního souboru, který vypíše PHP_SAPI nebo php_sapi_name() a je zavolán přes webový server. V příkazové řádce dostanete vždy cli, což o webu nic neříká. Poté kontrolní soubor ihned smažte.

Které SAPI je nejbezpečnější?

Žádné není samo o sobě bezpečné. PHP-FPM ale nabízí nejvíce nástrojů pro oddělení: vlastní pooly, uživatele a uzamčená nastavení pro každý web. Příručka PHP výslovně doporučuje pro nové instalace Apache PHP-FPM místo mod_php.

Týká se PHP2Shell i verze PHP pro příkazovou řádku?

Známá hlášení uvádějí PHP-FPM, mod_php, php-cgi, FrankenPHP a LiteSpeed. CLI nezpracovává požadavky ze sítě. Pochází ale většinou ze stejného zdroje balíčků a měla by se aktualizovat vždy také, už jen proto, aby kontrolní příkazy ukazovaly správný stav.

Může server používat více SAPI současně?

Ano, je to dokonce běžné. Téměř každý server má vedle webového SAPI také CLI pro úlohy cron a údržbu. Často navíc paralelně běží více verzí PHP-FPM. Každou z nich je nutné aktualizovat a restartovat zvlášť.

Zdroje

Okamžitý kontakt

Každá hodina se počítá. Napište nám hned.

Stručně popište systém, verzi PHP a pozorování. Ozveme se, vyjasníme situaci a budeme pracovat na dálku, dokud nebude incident uzavřen a zdokumentován.

Okamžitá pomoc