# SAPI razložen: kako PHP govori s spletnim strežnikom

> PHP SAPI razložen: kaj pomenijo fpm-fcgi, apache2handler, cgi-fcgi in cli, kako preverite način delovanja in zakaj določa tveganje in ponovni zagon.

Vir: https://phpsos.de/sl/php/sapi-erklaert/  
Stanje: 25.10.2026  
Ponudnik: PHP SOS, Nujna pomoč za PHP in varnost strežnikov. Takojšnja pomoč po WhatsAppu: https://wa.me/491736494914?text=Pozdravljeni%2C%20PHP%20SOS%2C%20potrebujemo%20pomo%C4%8D%20z%20na%C5%A1im%20stre%C5%BEnikom%20PHP.%20Podjetje%3A%20%E2%80%A6%20Spletna%20stran%3A%20%E2%80%A6

**Na kratko:** SAPI pomeni Server Application Programming Interface, vmesnik, prek katerega PHP komunicira z okoljem. Značilni SAPI so `fpm-fcgi` (PHP-FPM), `apache2handler` (mod_php), `cgi-fcgi` (php-cgi), `litespeed` in `cli` za ukazno vrstico. SAPI določa, kako zahteve prispejo, katera php.ini velja in kateri procesi se morajo po posodobitvi znova zagnati. Pri PHP2Shell je od tega odvisna celo uvrstitev tveganja.

## Kaj je SAPI?

PHP sam je program, ki izvaja kodo. Da lahko streže spletne strani, potrebuje povezavo s spletnim strežnikom, z ukazno vrstico ali z drugo aplikacijo. Ta povezava je SAPI. Sprejme podatke zahteve, jih preda [Zend Engine](https://phpsos.de/sl/php/zend-engine/) in vrne izpis.

SAPI si lahko predstavljamo kot vtikač: motor ostane isti, glede na vtikač pa ustreza Apacheu, Nginxu prek FastCGI, LiteSpeedu ali terminalu. Vsaka različica ima lastne prednosti, lastne poti konfiguracije in lastne pasti.

SAPI odloča predvsem o treh stvareh, ki štejejo v vsakdanjem delu:

1. **Procesni model:** ali PHP teče v spletnem strežniku, kot samostojna storitev s trajnimi workerji ali kot kratkoživ proces za vsak klic?
2. **Konfiguracija:** katera php.ini se prebere in kje smejo stati dodatne nastavitve, na primer v `.htaccess`, v `.user.ini` ali v poolu FPM?
3. **Pravice in ločevanje:** pod katerim uporabnikom teče koda in ali je mogoče več spletnih strani med seboj ločiti?

V panelih za gostovanje se SAPI pojavljajo pod drugimi imeni. Plesk na primer govori o handlerjih PHP, kot so „FPM application“, „FastCGI application“ ali „Apache module“. Mišljeni so isti načini delovanja, ki jih opisuje ta stran. Če je dvom, pomaga spodnja preizkusna datoteka, ki prikaže dejansko ime SAPI.

## Kateri SAPI za PHP obstajajo?

Priročnik PHP za `php_sapi_name()` med drugim navaja te vrnjene vrednosti: `apache`, `apache2handler`, `cgi` (do PHP 5.3), `cgi-fcgi`, `cli`, `cli-server`, `embed`, `fpm-fcgi`, `litespeed` in `phpdbg`. Seznam izrecno ni popoln.

| Ime SAPI | Način delovanja | Značilna uporaba | Procesni model |
|---|---|---|---|
| `fpm-fcgi` | PHP-FPM | Nginx, Apache s `proxy_fcgi`, paneli za gostovanje | samostojna storitev s pooli workerjev |
| `apache2handler` | mod_php | starejši strežniki Apache, preprosti image Docker | PHP v procesu Apache |
| `cgi-fcgi` | php-cgi | stare namestitve, nekatere postavitve Windows | proces za vsako zahtevo ali FastCGI |
| `litespeed` | LSAPI | spletni strežnik LiteSpeed, številni ponudniki skupnega gostovanja | lastni procesi PHP |
| `cli` | ukazna vrstica | cron opravila, Composer, skripte za vzdrževanje | en proces na klic |
| `cli-server` | vgrajeni spletni strežnik | samo lokalni razvoj (`php -S`) | razvojni strežnik |
| `embed` | vdelan | PHP v drugih programih | odvisno od programa |
| `phpdbg` | razhroščevalnik | iskanje napak | interaktivno |

FrankenPHP je sodoben aplikacijski strežnik, ki PHP vdela neposredno. Tudi nanj vpliva PHP2Shell in ima lastne poti posodobitev; podrobnosti na strani [Zavarovanje FrankenPHP](https://phpsos.de/sl/server/frankenphp/).

## Tako preverite SAPI svojega strežnika

SAPI spletne strani ugotovite samo prek spletnega strežnika, ne prek ukazne vrstice. Zadošča majhna preizkusna datoteka:

```php
<?php
// sapi-check.php: po klicu takoj znova izbrišite
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";
```

V ukazni vrstici je nameščene različice in storitve mogoče zajeti samo z branjem:

```bash
php -r 'echo PHP_SAPI, PHP_EOL;'          # vedno "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # nameščene različice FPM
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # ali je mod_php naložen?
```

## Zakaj ima lahko vsak SAPI svojo php.ini

Po priročniku PHP najprej poišče datoteko `php-SAPI.ini`, torej na primer `php-cli.ini`, šele nato `php.ini`. Distribucije, kot sta Debian in Ubuntu, gredo dlje in za vsak SAPI ustvarijo lastne mape, na primer `/etc/php/8.3/fpm/` in `/etc/php/8.3/cli/`.

Razlikuje se tudi trenutek: pri strežniških modulih PHP konfiguracijo po priročniku prebere samo enkrat ob zagonu spletnega strežnika, pri CGI in CLI ob vsakem klicu. Kdor spreminja nastavitev, mora zato vedeti, kateri SAPI je prizadet. Več na strani [php.ini razložena](https://phpsos.de/sl/php/php-ini-erklaert/).

## SAPI in varnost: kaj je pokazal PHP2Shell

Po poročilih so zaradi PHP2Shell prizadeti PHP-FPM, Apache z mod_php, php-cgi, FrankenPHP in LiteSpeed. Ekipa PHP tveganje pri mod_php ocenjuje kot najvišje, ker je bil tam prikazan exploit, še preden teče koda aplikacije. Razlogi so na strani [Zakaj je tveganje pri mod_php najvišje](https://phpsos.de/sl/php2shell/mod-php-risiko/).

Za obratovanje SAPI pomeni predvsem eno: določa, kaj je treba po posodobitvi znova zagnati.

1. **PHP-FPM:** vsi pooli in workerji vsake nameščene različice
2. **mod_php:** celotna storitev Apache, ne samo reload
3. **php-cgi in postavitve FastCGI:** vsi preostali procesi PHP
4. **LiteSpeed:** procesi PHP spletnega strežnika po navodilih ponudnika
5. **CLI:** ni trajnih procesov, a posodobite tudi paket, da preverjanja držijo

Srednjeročno se splača prehod stran od mod_php. Priročnik PHP za nove namestitve Apacheja priporoča PHP-FPM z `mod_proxy_fcgi`. Osnove opisuje stran [PHP-FPM razložen](https://phpsos.de/sl/php/php-fpm-erklaert/).

## Kako PHP SOS pomaga konkretno?

- **Zajem SAPI:** za vsak strežnik ugotovimo, kateri načini delovanja in različice PHP so dejansko aktivni.
- **Pravilen ponovni zagon:** prek [storitve popravljanja PHP](https://phpsos.de/sl/leistungen/php-patch-service/) posodobimo vsak SAPI in dokažemo ponovni zagon vseh procesov.
- **Razvrstitev konfiguracije:** pokažemo, katera php.ini in katere nastavitve poola veljajo za vašo spletno stran.
- **Načrtovanje prehoda:** kjer teče mod_php ali php-cgi, prehod na PHP-FPM načrtujemo in preizkusimo.


## Pogosta vprašanja

**Kako ugotovim, kateri SAPI uporablja moja spletna stran?**  
Najzanesljiveje s kratek čas odloženo preizkusno datoteko, ki izpiše PHP_SAPI ali php_sapi_name() in jo pokličete prek spletnega strežnika. V ukazni vrstici vedno dobite cli, kar o spletni strani ne pove nič. Preizkusno datoteko nato takoj izbrišite.

**Kateri SAPI je najvarnejši?**  
Noben ni sam po sebi varen. PHP-FPM pa ponuja največ orodij za ločevanje: lastne poole, uporabnike in zaklenjene nastavitve za vsako spletno stran. Priročnik PHP za nove namestitve Apacheja izrecno svetuje PHP-FPM namesto mod_php.

**Ali je različica PHP2Shell za ukazno vrstico prizadeta?**  
Znana poročila navajajo PHP-FPM, mod_php, php-cgi, FrankenPHP in LiteSpeed. CLI ne obdeluje zahtev iz omrežja. Vendar praviloma izvira iz istega vira paketov in jo je treba vedno posodobiti tudi, že zato, da ukazi za preverjanje prikažejo pravo stanje.

**Ali lahko strežnik hkrati uporablja več SAPI?**  
Da, to je celo običajno. Skoraj vsak strežnik ima poleg spletnega SAPI še CLI za cron opravila in vzdrževanje. Pogosto vzporedno tečeta tudi dve ali več različic PHP-FPM. Vsako od njih je treba posodobiti in znova zagnati posebej.

## Viri

- [Priročnik PHP: php_sapi_name()](https://www.php.net/manual/en/function.php-sapi-name.php)
- [Priročnik PHP: konfiguracijska datoteka](https://www.php.net/manual/en/configuration.file.php)
- [Priročnik PHP: Apache 2 v sistemu Unix](https://www.php.net/manual/en/install.unix.apache2.php)
- [php.net: varnostna obvestila](https://www.php.net/)
