# SAPI explicada: como o PHP comunica com o servidor web

> PHP SAPI explicada: o que significam fpm-fcgi, apache2handler, cgi-fcgi e cli, como verificar o modo de operação e porque determina risco e reinício.

Fonte: https://phpsos.de/pt/php/sapi-erklaert/  
Atualizado em: 25/10/2026  
Prestador: PHP SOS, Assistência de emergência PHP e segurança de servidores. Ajuda imediata por WhatsApp: https://wa.me/491736494914?text=Ol%C3%A1%2C%20PHP%20SOS%2C%20precisamos%20de%20ajuda%20com%20o%20nosso%20servidor%20PHP.%20Empresa%3A%20%E2%80%A6%20Site%3A%20%E2%80%A6

**Em resumo:** SAPI significa Server Application Programming Interface, a interface através da qual o PHP comunica com o seu ambiente. As SAPI típicas são `fpm-fcgi` (PHP-FPM), `apache2handler` (mod_php), `cgi-fcgi` (php-cgi), `litespeed` e `cli` para a linha de comandos. A SAPI determina como chegam os pedidos, que php.ini vale e que processos têm de reiniciar depois de uma atualização. No PHP2Shell, até a classificação do risco depende dela.

## O que é uma SAPI?

O próprio PHP é um programa que executa código. Para poder entregar páginas web, precisa de uma ligação a um servidor web, à linha de comandos ou a outra aplicação. Essa ligação é a SAPI. Recebe os dados do pedido, passa-os à [Zend Engine](https://phpsos.de/pt/php/zend-engine/) e devolve a saída.

Pode imaginar-se a SAPI como uma ficha: o motor é o mesmo, mas, consoante a ficha, encaixa no Apache, no Nginx via FastCGI, no LiteSpeed ou no terminal. Cada variante tem pontos fortes, caminhos de configuração e armadilhas próprios.

A SAPI decide sobretudo três coisas que contam no dia a dia:

1. **Modelo de processos:** o PHP corre dentro do servidor web, como serviço próprio com workers permanentes ou como processo de curta duração por chamada?
2. **Configuração:** que php.ini é lido e onde podem constar definições adicionais, por exemplo num `.htaccess`, num `.user.ini` ou no pool do FPM?
3. **Permissões e separação:** com que utilizador corre o código e é possível separar vários sites uns dos outros?

Nos painéis de alojamento, as SAPI aparecem com outros nomes. O Plesk fala, por exemplo, em handlers PHP como «FPM application», «FastCGI application» ou «Apache module». Referem-se aos mesmos modos de operação que esta página descreve. Em caso de dúvida, ajuda o ficheiro de teste mais abaixo, que mostra o nome real da SAPI.

## Que SAPI do PHP existem?

O manual do PHP indica, para `php_sapi_name()`, entre outros, estes valores de retorno: `apache`, `apache2handler`, `cgi` (até ao PHP 5.3), `cgi-fcgi`, `cli`, `cli-server`, `embed`, `fpm-fcgi`, `litespeed` e `phpdbg`. A lista não é expressamente exaustiva.

| Nome da SAPI | Modo de operação | Utilização típica | Modelo de processos |
|---|---|---|---|
| `fpm-fcgi` | PHP-FPM | Nginx, Apache com `proxy_fcgi`, painéis de alojamento | serviço próprio com pools de workers |
| `apache2handler` | mod_php | servidores Apache mais antigos, imagens Docker simples | PHP no processo do Apache |
| `cgi-fcgi` | php-cgi | instalações antigas, algumas configurações Windows | processo por pedido ou FastCGI |
| `litespeed` | LSAPI | servidor web LiteSpeed, muitos alojadores partilhados | processos PHP próprios |
| `cli` | linha de comandos | tarefas cron, Composer, scripts de manutenção | um processo por chamada |
| `cli-server` | servidor web integrado | apenas desenvolvimento local (`php -S`) | um servidor de desenvolvimento |
| `embed` | incorporado | PHP dentro de outros programas | depende do programa |
| `phpdbg` | depurador | deteção de erros | interativo |

O FrankenPHP é um servidor de aplicações moderno que incorpora o PHP diretamente. Também está afetado pelo PHP2Shell e tem vias de atualização próprias; pormenores em [Proteger o FrankenPHP](https://phpsos.de/pt/server/frankenphp/).

## Como verificar a SAPI do seu servidor

A SAPI de um site só se descobre através do servidor web, não pela linha de comandos. Basta um pequeno ficheiro de teste:

```php
<?php
// sapi-check.php: apagar de imediato depois de o chamar
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";
```

Na linha de comandos podem registar-se, apenas em leitura, as variantes e serviços instalados:

```bash
php -r 'echo PHP_SAPI, PHP_EOL;'          # sempre "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # versões FPM instaladas
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # mod_php carregado?
```

## Porque é que cada SAPI pode ter o seu próprio php.ini

Segundo o manual do PHP, o PHP procura primeiro um ficheiro `php-SAPI.ini`, por exemplo `php-cli.ini`, e só depois o `php.ini`. Distribuições como Debian e Ubuntu vão mais longe e criam pastas próprias por SAPI, por exemplo `/etc/php/8.3/fpm/` e `/etc/php/8.3/cli/`.

O momento também difere: nos módulos de servidor, o PHP lê a configuração, segundo o manual, apenas uma vez no arranque do servidor web; no CGI e na CLI, a cada chamada. Quem altera uma definição tem por isso de saber que SAPI é afetada. Mais sobre isto em [O php.ini explicado](https://phpsos.de/pt/php/php-ini-erklaert/).

## SAPI e segurança: o que o PHP2Shell mostrou

Segundo os comunicados, o PHP2Shell afeta PHP-FPM, Apache com mod_php, php-cgi, FrankenPHP e LiteSpeed. A equipa do PHP classifica o risco como o mais elevado no mod_php, porque aí foi demonstrado um exploit antes de o código da aplicação correr. As razões estão em [Porque é que o mod_php tem o risco mais elevado](https://phpsos.de/pt/php2shell/mod-php-risiko/).

Para a operação, a SAPI significa sobretudo uma coisa: determina o que tem de reiniciar depois da atualização.

1. **PHP-FPM:** todos os pools e workers de cada versão instalada
2. **mod_php:** o serviço Apache completo, não apenas um reload
3. **php-cgi e configurações FastCGI:** todos os processos PHP restantes
4. **LiteSpeed:** os processos PHP do servidor web, segundo as instruções do fabricante
5. **CLI:** sem processos permanentes, mas atualizar também o pacote, para que as verificações estejam corretas

A médio prazo compensa abandonar o mod_php. O manual do PHP recomenda, para novas instalações do Apache, o PHP-FPM com `mod_proxy_fcgi`. Os fundamentos são descritos em [PHP-FPM explicado](https://phpsos.de/pt/php/php-fpm-erklaert/).

## Como ajuda concretamente a PHP SOS?

- **Levantar as SAPI:** Apuramos, para cada servidor, que modos de operação e versões do PHP estão realmente ativos.
- **Reiniciar corretamente:** Através do [serviço de patches PHP](https://phpsos.de/pt/leistungen/php-patch-service/) atualizamos cada SAPI e comprovamos o reinício de todos os processos.
- **Atribuir a configuração:** Mostramos que php.ini e que definições de pool valem para o seu site.
- **Planear a mudança:** Onde corre mod_php ou php-cgi, planeamos e testamos a mudança para o PHP-FPM.


## Perguntas frequentes

**Como descubro que SAPI o meu site utiliza?**  
O mais fiável é um ficheiro de teste colocado por pouco tempo, que mostre PHP_SAPI ou php_sapi_name(), chamado através do servidor web. Na linha de comandos obtém sempre cli, o que nada diz sobre o site. Depois, apague o ficheiro de teste de imediato.

**Qual é a SAPI mais segura?**  
Nenhuma é segura por si só. O PHP-FPM oferece, porém, mais ferramentas de separação: pools, utilizadores e definições bloqueadas por site. O manual do PHP aconselha expressamente o PHP-FPM em vez do mod_php para novas instalações do Apache.

**A versão de linha de comandos do PHP está afetada pelo PHP2Shell?**  
Os comunicados conhecidos referem PHP-FPM, mod_php, php-cgi, FrankenPHP e LiteSpeed. A CLI não processa pedidos vindos da rede. Mas costuma vir da mesma fonte de pacotes e deve ser sempre atualizada também, nem que seja para que os comandos de verificação mostrem o estado correto.

**Um servidor pode usar várias SAPI ao mesmo tempo?**  
Sim, e é até habitual. Quase todos os servidores têm, além da SAPI web, a CLI para tarefas cron e manutenção. Muitas vezes correm também em paralelo várias versões do PHP-FPM. Cada uma tem de ser atualizada e reiniciada individualmente.

## Fontes

- [Manual do PHP: php_sapi_name()](https://www.php.net/manual/en/function.php-sapi-name.php)
- [Manual do PHP: ficheiro de configuração](https://www.php.net/manual/en/configuration.file.php)
- [Manual do PHP: Apache 2 em Unix](https://www.php.net/manual/en/install.unix.apache2.php)
- [php.net: comunicados de segurança](https://www.php.net/)
