# SAPI wyjaśnione: jak PHP rozmawia z serwerem WWW

> PHP SAPI wyjaśnione: co znaczą fpm-fcgi, apache2handler, cgi-fcgi i cli, jak sprawdzić tryb pracy i dlaczego decyduje on o ryzyku i restarcie.

Źródło: https://phpsos.de/pl/php/sapi-erklaert/  
Stan: 25.10.2026  
Dostawca: PHP SOS, Pomoc awaryjna PHP i bezpieczeństwo serwerów. Natychmiastowa pomoc przez WhatsApp: https://wa.me/491736494914?text=Dzie%C5%84%20dobry%2C%20PHP%20SOS%2C%20potrzebujemy%20pomocy%20z%20naszym%20serwerem%20PHP.%20Firma%3A%20%E2%80%A6%20Strona%20internetowa%3A%20%E2%80%A6

**Krótko:** SAPI to skrót od Server Application Programming Interface, czyli interfejsu, przez który PHP rozmawia ze swoim otoczeniem. Typowe SAPI to `fpm-fcgi` (PHP-FPM), `apache2handler` (mod_php), `cgi-fcgi` (php-cgi), `litespeed` i `cli` dla wiersza poleceń. SAPI określa, jak przychodzą żądania, który php.ini obowiązuje i które procesy po aktualizacji trzeba zrestartować. W przypadku PHP2Shell od niego zależy nawet ocena ryzyka.

## Czym jest SAPI?

PHP samo w sobie jest programem, który wykonuje kod. Aby mogło wydawać strony internetowe, potrzebuje połączenia z serwerem WWW, z wierszem poleceń lub z inną aplikacją. Tym połączeniem jest SAPI. Przyjmuje dane żądania, przekazuje je do [Zend Engine](https://phpsos.de/pl/php/zend-engine/) i zwraca wyjście.

SAPI można sobie wyobrazić jak wtyczkę: silnik pozostaje ten sam, ale zależnie od wtyczki pasuje do Apache, do Nginx przez FastCGI, do LiteSpeed albo do terminala. Każdy wariant ma własne mocne strony, własne ścieżki konfiguracji i własne pułapki.

SAPI decyduje przede wszystkim o trzech sprawach, które liczą się na co dzień:

1. **Model procesów:** Czy PHP działa w serwerze WWW, jako osobna usługa ze stałymi workerami, czy jako krótkotrwały proces dla każdego wywołania?
2. **Konfiguracja:** Który php.ini jest czytany i gdzie mogą znajdować się dodatkowe ustawienia, na przykład w `.htaccess`, w `.user.ini` lub w puli FPM?
3. **Uprawnienia i rozdzielenie:** Pod jakim użytkownikiem działa kod i czy można rozdzielić od siebie kilka stron?

W panelach hostingowych SAPI występują pod innymi nazwami. Plesk mówi na przykład o programach obsługi PHP, takich jak „FPM application”, „FastCGI application” czy „Apache module”. Chodzi o te same tryby pracy, które opisuje ta strona. W razie wątpliwości pomoże plik kontrolny poniżej, który pokazuje rzeczywistą nazwę SAPI.

## Jakie istnieją SAPI PHP?

Podręcznik PHP wymienia dla `php_sapi_name()` między innymi takie wartości zwracane: `apache`, `apache2handler`, `cgi` (do PHP 5.3), `cgi-fcgi`, `cli`, `cli-server`, `embed`, `fpm-fcgi`, `litespeed` i `phpdbg`. Lista jest wyraźnie niewyczerpująca.

| Nazwa SAPI | Tryb pracy | Typowe zastosowanie | Model procesów |
|---|---|---|---|
| `fpm-fcgi` | PHP-FPM | Nginx, Apache z `proxy_fcgi`, panele hostingowe | osobna usługa z pulami workerów |
| `apache2handler` | mod_php | starsze serwery Apache, proste obrazy Docker | PHP w procesie Apache |
| `cgi-fcgi` | php-cgi | stare instalacje, niektóre konfiguracje Windows | proces na żądanie lub FastCGI |
| `litespeed` | LSAPI | serwer WWW LiteSpeed, wielu dostawców hostingu współdzielonego | własne procesy PHP |
| `cli` | wiersz poleceń | zadania Cron, Composer, skrypty konserwacyjne | jeden proces na wywołanie |
| `cli-server` | wbudowany serwer WWW | tylko lokalne programowanie (`php -S`) | serwer deweloperski |
| `embed` | osadzone | PHP w innych programach | zależnie od programu |
| `phpdbg` | debugger | szukanie błędów | interaktywnie |

FrankenPHP to nowoczesny serwer aplikacji, który osadza PHP bezpośrednio. Jest również dotknięty przez PHP2Shell i ma własne ścieżki aktualizacji; szczegóły na stronie [Zabezpieczanie FrankenPHP](https://phpsos.de/pl/server/frankenphp/).

## Jak sprawdzić SAPI Państwa serwera

SAPI strony można poznać tylko przez serwer WWW, nie przez wiersz poleceń. Wystarczy mały plik kontrolny:

```php
<?php
// sapi-check.php: po wywołaniu natychmiast usunąć
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";
```

W wierszu poleceń można odczytać zainstalowane warianty i usługi, bez wprowadzania zmian:

```bash
php -r 'echo PHP_SAPI, PHP_EOL;'          # zawsze "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # zainstalowane wersje FPM
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # czy mod_php jest załadowany?
```

## Dlaczego każde SAPI może mieć własny php.ini

Według podręcznika PHP szuka najpierw pliku `php-SAPI.ini`, czyli na przykład `php-cli.ini`, a dopiero potem `php.ini`. Dystrybucje takie jak Debian i Ubuntu idą dalej i tworzą osobne katalogi dla każdego SAPI, na przykład `/etc/php/8.3/fpm/` i `/etc/php/8.3/cli/`.

Różni się także moment odczytu: w modułach serwera PHP czyta konfigurację według podręcznika tylko raz przy starcie serwera WWW, w CGI i CLI przy każdym wywołaniu. Kto zmienia ustawienie, musi więc wiedzieć, którego SAPI ono dotyczy. Więcej na stronie [php.ini wyjaśniony](https://phpsos.de/pl/php/php-ini-erklaert/).

## SAPI i bezpieczeństwo: czego nauczył PHP2Shell

Według komunikatów PHP2Shell dotyczy PHP-FPM, Apache z mod_php, php-cgi, FrankenPHP i LiteSpeed. Zespół PHP ocenia ryzyko w przypadku mod_php jako najwyższe, ponieważ pokazano tam exploit, zanim zacznie działać kod aplikacji. Powody podajemy na stronie [Dlaczego mod_php niesie najwyższe ryzyko](https://phpsos.de/pl/php2shell/mod-php-risiko/).

Dla eksploatacji SAPI oznacza przede wszystkim jedno: określa, co po aktualizacji trzeba zrestartować.

1. **PHP-FPM:** wszystkie pule i workery każdej zainstalowanej wersji
2. **mod_php:** cała usługa Apache, a nie tylko reload
3. **php-cgi i konfiguracje FastCGI:** wszystkie pozostałe procesy PHP
4. **LiteSpeed:** procesy PHP serwera WWW według instrukcji dostawcy
5. **CLI:** brak procesów stałych, ale pakiet też trzeba zaktualizować, aby kontrole były zgodne ze stanem faktycznym

Z czasem warto odejść od mod_php. Podręcznik PHP zaleca dla nowych instalacji Apache PHP-FPM z `mod_proxy_fcgi`. Podstawy opisuje artykuł [PHP-FPM wyjaśniony](https://phpsos.de/pl/php/php-fpm-erklaert/).

## Jak konkretnie pomaga PHP SOS?

- **Inwentaryzacja SAPI:** Ustalamy dla każdego serwera, jakie tryby pracy i wersje PHP są faktycznie aktywne.
- **Prawidłowy restart:** W ramach [usługi PHP Patch Service](https://phpsos.de/pl/leistungen/php-patch-service/) aktualizujemy każde SAPI i dokumentujemy restart wszystkich procesów.
- **Przyporządkowanie konfiguracji:** Pokazujemy, który php.ini i które ustawienia puli obowiązują dla Państwa strony.
- **Planowanie przejścia:** Tam, gdzie działa mod_php lub php-cgi, planujemy i testujemy przejście na PHP-FPM.


## Częste pytania

**Jak sprawdzić, jakiego SAPI używa moja strona?**  
Najpewniej za pomocą krótko umieszczonego pliku kontrolnego, który wypisuje PHP_SAPI lub php_sapi_name(), wywołanego przez serwer WWW. W wierszu poleceń zawsze otrzymają Państwo cli, co nic nie mówi o stronie. Po sprawdzeniu plik kontrolny należy od razu usunąć.

**Które SAPI jest najbezpieczniejsze?**  
Żadne nie jest bezpieczne samo z siebie. PHP-FPM oferuje jednak najwięcej narzędzi do rozdzielania: osobne pule, użytkowników i zablokowane ustawienia dla każdej strony. Podręcznik PHP wyraźnie zaleca dla nowych instalacji Apache PHP-FPM zamiast mod_php.

**Czy wersja PHP dla wiersza poleceń jest dotknięta przez PHP2Shell?**  
Znane komunikaty wymieniają PHP-FPM, mod_php, php-cgi, FrankenPHP i LiteSpeed. CLI nie przetwarza żądań z sieci. Zwykle pochodzi jednak z tego samego źródła pakietów i zawsze powinna być aktualizowana razem z resztą, choćby po to, aby polecenia kontrolne pokazywały właściwy stan.

**Czy serwer może używać wielu SAPI jednocześnie?**  
Tak, to nawet normalne. Prawie każdy serwer ma obok SAPI webowego także CLI dla zadań Cron i konserwacji. Często równolegle działa dodatkowo kilka wersji PHP-FPM. Każdą z nich trzeba osobno zaktualizować i zrestartować.

## Źródła

- [Podręcznik PHP: php_sapi_name()](https://www.php.net/manual/en/function.php-sapi-name.php)
- [Podręcznik PHP: plik konfiguracyjny](https://www.php.net/manual/en/configuration.file.php)
- [Podręcznik PHP: Apache 2 w systemie Unix](https://www.php.net/manual/en/install.unix.apache2.php)
- [php.net: komunikaty o bezpieczeństwie](https://www.php.net/)
