# SAPI selgitus: kuidas PHP veebiserveriga suhtleb

> PHP SAPI selgitatud: mida tähendavad fpm-fcgi, apache2handler, cgi-fcgi ja cli, kuidas töörežiimi kontrollida ning miks see määrab riski ja taaskäivituse.

Allikas: https://phpsos.de/et/php/sapi-erklaert/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** SAPI tähendab Server Application Programming Interface, liidest, mille kaudu PHP oma keskkonnaga suhtleb. Tüüpilised SAPI-d on `fpm-fcgi` (PHP-FPM), `apache2handler` (mod_php), `cgi-fcgi` (php-cgi), `litespeed` ja `cli` käsurea jaoks. SAPI määrab, kuidas päringud saabuvad, milline php.ini kehtib ja millised protsessid tuleb pärast uuendust uuesti käivitada. PHP2Shelli puhul sõltub sellest isegi riskihinnang.

## Mis on SAPI?

PHP ise on programm, mis käivitab koodi. Et see saaks veebilehti edastada, vajab see ühendust veebiserveri, käsurea või mõne muu rakendusega. See ühendus ongi SAPI. See võtab vastu päringuandmed, annab need edasi [Zend Engine'ile](https://phpsos.de/et/php/zend-engine/) ja tagastab väljundi.

SAPI-t võib ette kujutada pistikuna: mootor jääb samaks, kuid olenevalt pistikust sobib see Apache'ile, FastCGI kaudu Nginxile, LiteSpeedile või terminalile. Igal variandil on oma tugevused, oma seadistusteed ja oma lõksud.

SAPI otsustab eelkõige kolme igapäevaselt olulise asja üle:

1. **Protsessimudel:** Kas PHP töötab veebiserveri sees, eraldi teenusena püsivate workeritega või lühiealise protsessina iga väljakutse kohta?
2. **Seadistus:** Milline php.ini loetakse ja kus tohivad lisasätted olla, näiteks failis `.htaccess`, failis `.user.ini` või FPM-poolis?
3. **Õigused ja eraldamine:** Millise kasutaja all kood töötab ja kas mitut veebisaiti on võimalik üksteisest eraldada?

Majutuspaneelides esinevad SAPI-d teiste nimede all. Plesk räägib näiteks PHP käsitlejatest nagu „FPM application“, „FastCGI application“ või „Apache module“. Mõeldud on needsamad töörežiimid, mida see leht kirjeldab. Kahtluse korral aitab allpool olev kontrollifail, mis näitab tegelikku SAPI nime.

## Millised PHP SAPI-d on olemas?

PHP käsiraamat nimetab `php_sapi_name()` jaoks muu hulgas järgmisi tagastusväärtusi: `apache`, `apache2handler`, `cgi` (kuni PHP 5.3), `cgi-fcgi`, `cli`, `cli-server`, `embed`, `fpm-fcgi`, `litespeed` ja `phpdbg`. Loetelu ei ole selgesõnaliselt ammendav.

| SAPI nimi | Töörežiim | Tüüpiline kasutus | Protsessimudel |
|---|---|---|---|
| `fpm-fcgi` | PHP-FPM | Nginx, Apache koos `proxy_fcgi`-ga, majutuspaneelid | eraldi teenus workeripoolidega |
| `apache2handler` | mod_php | vanemad Apache'i serverid, lihtsad Dockeri kujutised | PHP Apache'i protsessis |
| `cgi-fcgi` | php-cgi | vanad paigaldused, mõned Windowsi seadistused | protsess päringu kohta või FastCGI |
| `litespeed` | LSAPI | LiteSpeedi veebiserver, paljud jagatud veebimajutajad | oma PHP protsessid |
| `cli` | käsurida | cron-tööd, Composer, hooldusskriptid | üks protsess väljakutse kohta |
| `cli-server` | sisseehitatud veebiserver | ainult kohalik arendus (`php -S`) | üks arendusserver |
| `embed` | põimitud | PHP teistes programmides | sõltub programmist |
| `phpdbg` | silur | vigade otsimine | interaktiivne |

FrankenPHP on kaasaegne rakendusserver, mis põimib PHP otse sisse. Ka seda PHP2Shell mõjutab ja sellel on oma uuendusteed; üksikasjad leiate lehelt [FrankenPHP kaitsmine](https://phpsos.de/et/server/frankenphp/).

## Nii kontrollite oma serveri SAPI-t

Veebisaidi SAPI-t saate teada ainult veebiserveri kaudu, mitte käsurealt. Piisab väikesest kontrollifailist:

```php
<?php
// sapi-check.php: kustuta kohe pärast väljakutset
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";
```

Käsureal saab paigaldatud variandid ja teenused lugevalt kindlaks teha:

```bash
php -r 'echo PHP_SAPI, PHP_EOL;'          # alati "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # paigaldatud FPM versioonid
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # kas mod_php on laaditud?
```

## Miks igal SAPI-l võib olla oma php.ini

PHP käsiraamatu järgi otsib PHP kõigepealt faili `php-SAPI.ini`, näiteks `php-cli.ini`, ja alles seejärel faili `php.ini`. Distributsioonid nagu Debian ja Ubuntu lähevad kaugemale ja loovad iga SAPI jaoks oma kaustad, näiteks `/etc/php/8.3/fpm/` ja `/etc/php/8.3/cli/`.

Erinev on ka ajahetk: servermoodulite puhul loeb PHP käsiraamatu järgi seadistuse ainult üks kord veebiserveri käivitamisel, CGI ja CLI puhul igal väljakutsel. Kes sätet muudab, peab seetõttu teadma, milline SAPI on mõjutatud. Lisateavet leiate lehelt [php.ini selgitus](https://phpsos.de/et/php/php-ini-erklaert/).

## SAPI ja turvalisus: mida PHP2Shell näitas

Teadete järgi mõjutab PHP2Shell PHP-FPM-i, Apache'i koos mod_php-ga, php-cgi-d, FrankenPHP-d ja LiteSpeedi. PHP meeskond hindab riski mod_php puhul kõige suuremaks, sest seal näidati ekspluateerimist enne, kui rakenduse kood käivitub. Põhjused leiate lehelt [Miks mod_php kannab suurimat riski](https://phpsos.de/et/php2shell/mod-php-risiko/).

Käitamise jaoks tähendab SAPI eelkõige üht: see määrab, mida tuleb pärast uuendust uuesti käivitada.

1. **PHP-FPM:** kõik poolid ja workerid igast paigaldatud versioonist
2. **mod_php:** kogu Apache'i teenus, mitte ainult reload
3. **php-cgi ja FastCGI seadistused:** kõik allesjäänud PHP protsessid
4. **LiteSpeed:** veebiserveri PHP protsessid pakkuja juhendi järgi
5. **CLI:** püsiprotsesse pole, kuid pakett tuleb koos uuendada, et kontrollid õiget seisu näitaksid

Keskpikas perspektiivis tasub mod_php-st loobuda. PHP käsiraamat soovitab uute Apache'i paigalduste jaoks PHP-FPM-i koos `mod_proxy_fcgi`-ga. Alused kirjeldab [PHP-FPM selgitus](https://phpsos.de/et/php/php-fpm-erklaert/).

## Kuidas PHP SOS konkreetselt aitab?

- **SAPI-de kaardistamine:** Selgitame iga serveri kohta välja, millised töörežiimid ja PHP versioonid tegelikult aktiivsed on.
- **Õige taaskäivitamine:** [PHP paigateenuse](https://phpsos.de/et/leistungen/php-patch-service/) kaudu uuendame iga SAPI-t ja tõendame kõigi protsesside taaskäivitust.
- **Seadistuse seostamine:** Näitame, milline php.ini ja millised poolisätted teie veebisaidi jaoks kehtivad.
- **Ülemineku planeerimine:** Kus töötab mod_php või php-cgi, planeerime ja testime üleminekut PHP-FPM-ile.


## Korduma kippuvad küsimused

**Kuidas ma saan teada, millist SAPI-t minu veebisait kasutab?**  
Kõige usaldusväärsemalt ajutiselt paigutatud kontrollifailiga, mis väljastab PHP_SAPI või php_sapi_name(), kui seda veebiserveri kaudu välja kutsuda. Käsureal saate alati cli, see veebisaidi kohta midagi ei ütle. Seejärel kustutage kontrollifail kohe ära.

**Milline SAPI on kõige turvalisem?**  
Ükski ei ole iseenesest turvaline. PHP-FPM pakub aga kõige rohkem eraldamise vahendeid: oma poolid, kasutajad ja lukustatud sätted iga veebisaidi kohta. PHP käsiraamat soovitab uute Apache'i paigalduste jaoks selgesõnaliselt PHP-FPM-i mod_php asemel.

**Kas PHP2Shell mõjutab PHP käsureaversiooni?**  
Teadaolevad teated nimetavad PHP-FPM-i, mod_php-d, php-cgi-d, FrankenPHP-d ja LiteSpeedi. CLI ei töötle võrgust tulevaid päringuid. Enamasti pärineb see aga samast paketiallikast ja tuleks alati koos uuendada, kasvõi selleks, et kontrollikäsud näitaksid õiget seisu.

**Kas server võib kasutada korraga mitut SAPI-t?**  
Jah, see on isegi tavaline. Peaaegu igal serveril on veebi-SAPI kõrval CLI cron-tööde ja hoolduse jaoks. Sageli töötab lisaks paralleelselt mitu PHP-FPM versiooni. Iga neist tuleb eraldi uuendada ja uuesti käivitada.

## Allikad

- [PHP käsiraamat: php_sapi_name()](https://www.php.net/manual/en/function.php-sapi-name.php)
- [PHP käsiraamat: seadistusfail](https://www.php.net/manual/en/configuration.file.php)
- [PHP käsiraamat: Apache 2 Unixis](https://www.php.net/manual/en/install.unix.apache2.php)
- [php.net: turvateated](https://www.php.net/)
