# SAPI vysvětleno: jak PHP komunikuje s webovým serverem

> PHP SAPI vysvětleno: co znamenají fpm-fcgi, apache2handler, cgi-fcgi a cli, jak provozní režim ověřit a proč určuje riziko i nutný restart po aktualizaci.

Zdroj: https://phpsos.de/cs/php/sapi-erklaert/  
Stav: 25.10.2026  
Poskytovatel: PHP SOS, Nouzová pomoc pro PHP a bezpečnost serverů. Okamžitá pomoc přes WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20den%2C%20PHP%20SOS%2C%20pot%C5%99ebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20PHP%20serverem.%20Firma%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**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](https://phpsos.de/cs/php/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](https://phpsos.de/cs/server/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
<?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í:

```bash
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](https://phpsos.de/cs/php/php-ini-erklaert/).

## 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](https://phpsos.de/cs/php2shell/mod-php-risiko/).

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](https://phpsos.de/cs/php/php-fpm-erklaert/).

## 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](https://phpsos.de/cs/leistungen/php-patch-service/) 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

- [Příručka PHP: php_sapi_name()](https://www.php.net/manual/en/function.php-sapi-name.php)
- [Příručka PHP: Konfigurační soubor](https://www.php.net/manual/en/configuration.file.php)
- [Příručka PHP: Apache 2 v systému Unix](https://www.php.net/manual/en/install.unix.apache2.php)
- [php.net: Bezpečnostní oznámení](https://www.php.net/)
