# SAPI objašnjen: kako PHP razgovara s web-poslužiteljem

> PHP SAPI objašnjen: što znače fpm-fcgi, apache2handler, cgi-fcgi i cli, kako provjeriti način rada i zašto određuje rizik i ponovno pokretanje.

Izvor: https://phpsos.de/hr/php/sapi-erklaert/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**Ukratko:** SAPI znači Server Application Programming Interface, sučelje putem kojeg PHP razgovara sa svojim okruženjem. Tipični SAPI-ji su `fpm-fcgi` (PHP-FPM), `apache2handler` (mod_php), `cgi-fcgi` (php-cgi), `litespeed` i `cli` za naredbeni redak. SAPI određuje kako zahtjevi stižu, koji php.ini vrijedi i koje procese treba ponovno pokrenuti nakon ažuriranja. Kod PHP2Shella o njemu ovisi čak i procjena rizika.

## Što je SAPI?

PHP je sam po sebi program koji izvršava kod. Da bi mogao isporučivati web-stranice, treba vezu s web-poslužiteljem, naredbenim retkom ili nekom drugom aplikacijom. Ta veza je SAPI. Prima podatke zahtjeva, prosljeđuje ih [Zend Engineu](https://phpsos.de/hr/php/zend-engine/) i vraća izlaz.

SAPI se može zamisliti kao utikač: motor ostaje isti, ali ovisno o utikaču pristaje na Apache, na Nginx putem FastCGI-ja, na LiteSpeed ili na terminal. Svaka izvedba ima vlastite prednosti, vlastite putove konfiguracije i vlastite zamke.

SAPI ponajprije odlučuje o tri stvari koje su važne u svakodnevici:

1. **Model procesa:** Radi li PHP unutar web-poslužitelja, kao zasebna usluga s trajnim workerima ili kao kratkotrajan proces po pozivu?
2. **Konfiguracija:** Koji se php.ini čita i gdje smiju stajati dodatne postavke, na primjer u `.htaccess`, u `.user.ini` ili u FPM poolu?
3. **Prava i razdvajanje:** Pod kojim korisnikom radi kod i mogu li se više web-stranica međusobno razdvojiti?

U hosting panelima SAPI-ji se pojavljuju pod drugim nazivima. Plesk, na primjer, govori o PHP rukovateljima poput „FPM application“, „FastCGI application“ ili „Apache module“. Misli se na iste načine rada koje opisuje ova stranica. U slučaju sumnje pomaže probna datoteka u nastavku, koja prikazuje stvarni naziv SAPI-ja.

## Koji PHP SAPI-ji postoje?

PHP priručnik za `php_sapi_name()` među ostalim navodi ove povratne vrijednosti: `apache`, `apache2handler`, `cgi` (do PHP-a 5.3), `cgi-fcgi`, `cli`, `cli-server`, `embed`, `fpm-fcgi`, `litespeed` i `phpdbg`. Popis izričito nije konačan.

| Naziv SAPI-ja | Način rada | Tipična uporaba | Model procesa |
|---|---|---|---|
| `fpm-fcgi` | PHP-FPM | Nginx, Apache s `proxy_fcgi`, hosting paneli | zasebna usluga s poolovima workera |
| `apache2handler` | mod_php | stariji Apache poslužitelji, jednostavne Docker slike | PHP u Apacheovu procesu |
| `cgi-fcgi` | php-cgi | naslijeđene instalacije, neke Windows postavke | proces po zahtjevu ili FastCGI |
| `litespeed` | LSAPI | LiteSpeed web-poslužitelj, mnogi shared hosteri | vlastiti PHP procesi |
| `cli` | naredbeni redak | cron zadaci, Composer, skripte za održavanje | jedan proces po pozivu |
| `cli-server` | ugrađeni web-poslužitelj | samo lokalni razvoj (`php -S`) | razvojni poslužitelj |
| `embed` | ugrađen | PHP u drugim programima | ovisi o programu |
| `phpdbg` | debugger | traženje pogrešaka | interaktivno |

FrankenPHP je moderan aplikacijski poslužitelj koji PHP izravno ugrađuje. Također je pogođen PHP2Shellom i ima vlastite putove ažuriranja; pojedinosti u članku [Osiguravanje FrankenPHP-a](https://phpsos.de/hr/server/frankenphp/).

## Kako provjeriti SAPI svojeg poslužitelja

SAPI web-stranice saznajete samo putem web-poslužitelja, a ne putem naredbenog retka. Dovoljna je mala probna datoteka:

```php
<?php
// sapi-check.php: nakon poziva odmah izbrisati
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";
```

U naredbenom retku instalirane izvedbe i usluge mogu se evidentirati samo čitanjem:

```bash
php -r 'echo PHP_SAPI, PHP_EOL;'          # uvijek "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # instalirane FPM verzije
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # je li mod_php učitan?
```

## Zašto svaki SAPI može imati vlastiti php.ini

Prema PHP priručniku PHP najprije traži datoteku `php-SAPI.ini`, dakle na primjer `php-cli.ini`, a tek potom `php.ini`. Distribucije poput Debiana i Ubuntua idu dalje i za svaki SAPI stvaraju vlastite mape, na primjer `/etc/php/8.3/fpm/` i `/etc/php/8.3/cli/`.

Razlikuje se i trenutak: kod modula poslužitelja PHP konfiguraciju prema priručniku čita samo jednom pri pokretanju web-poslužitelja, kod CGI-ja i CLI-ja pri svakom pozivu. Tko mijenja postavku, mora stoga znati koji je SAPI pogođen. Više u članku [php.ini objašnjen](https://phpsos.de/hr/php/php-ini-erklaert/).

## SAPI i sigurnost: što je pokazao PHP2Shell

Prema objavama PHP2Shellom su pogođeni PHP-FPM, Apache s mod_php-om, php-cgi, FrankenPHP i LiteSpeed. PHP tim rizik kod mod_php-a ocjenjuje najvišim jer je tamo pokazan exploit prije nego što se pokrene kod aplikacije. Razlozi su na stranici [Zašto mod_php nosi najviši rizik](https://phpsos.de/hr/php2shell/mod-php-risiko/).

Za rad SAPI znači ponajprije jedno: određuje što se nakon ažuriranja mora ponovno pokrenuti.

1. **PHP-FPM:** svi poolovi i workeri svake instalirane verzije
2. **mod_php:** cijela Apache usluga, ne samo reload
3. **php-cgi i FastCGI postavke:** svi preostali PHP procesi
4. **LiteSpeed:** PHP procesi web-poslužitelja prema uputama proizvođača
5. **CLI:** nema trajnih procesa, ali paket ažurirajte zajedno s ostalima kako bi provjere bile točne

Srednjoročno se isplati prijeći s mod_php-a. PHP priručnik za nove instalacije Apachea preporučuje PHP-FPM s `mod_proxy_fcgi`. Osnove opisuje članak [PHP-FPM objašnjen](https://phpsos.de/hr/php/php-fpm-erklaert/).

## Kako PHP SOS konkretno pomaže?

- **Evidentirati SAPI-je:** Za svaki poslužitelj utvrđujemo koji su načini rada i PHP verzije stvarno aktivni.
- **Ispravno ponovno pokrenuti:** Putem [PHP Patch usluge](https://phpsos.de/hr/leistungen/php-patch-service/) ažuriramo svaki SAPI i dokazujemo ponovno pokretanje svih procesa.
- **Pridružiti konfiguraciju:** Pokazujemo koji php.ini i koje postavke poola vrijede za Vašu web-stranicu.
- **Planirati prelazak:** Gdje radi mod_php ili php-cgi, planiramo i testiramo prelazak na PHP-FPM.


## Česta pitanja

**Kako saznati koji SAPI koristi moja web-stranica?**  
Najpouzdanije kratkotrajno postavljenom probnom datotekom koja ispisuje PHP_SAPI ili php_sapi_name() i poziva se putem web-poslužitelja. U naredbenom retku uvijek dobivate cli, što o web-stranici ne govori ništa. Probnu datoteku nakon toga odmah izbrišite.

**Koji je SAPI najsigurniji?**  
Nijedan nije sam po sebi siguran. No PHP-FPM nudi najviše alata za razdvajanje: vlastite poolove, korisnike i zaključane postavke po web-stranici. PHP priručnik za nove instalacije Apachea izričito preporučuje PHP-FPM umjesto mod_php-a.

**Pogađa li PHP2Shell inačicu PHP-a za naredbeni redak?**  
Poznate objave navode PHP-FPM, mod_php, php-cgi, FrankenPHP i LiteSpeed. CLI ne obrađuje zahtjeve iz mreže. No najčešće potječe iz istog izvora paketa i uvijek ga treba ažurirati zajedno s ostalima, već zato da naredbe za provjeru prikazuju ispravno stanje.

**Može li poslužitelj istodobno koristiti više SAPI-ja?**  
Da, to je čak uobičajeno. Gotovo svaki poslužitelj uz web SAPI ima i CLI za cron zadatke i održavanje. Često usporedno rade i nekoliko verzija PHP-FPM-a. Svaku od njih treba zasebno ažurirati i ponovno pokrenuti.

## Izvori

- [PHP priručnik: php_sapi_name()](https://www.php.net/manual/en/function.php-sapi-name.php)
- [PHP priručnik: Konfiguracijska datoteka](https://www.php.net/manual/en/configuration.file.php)
- [PHP priručnik: Apache 2 na Unixu](https://www.php.net/manual/en/install.unix.apache2.php)
- [php.net: Sigurnosne objave](https://www.php.net/)
