# SAPI explicada: cómo habla PHP con el servidor web

> PHP SAPI explicada: qué significan fpm-fcgi, apache2handler, cgi-fcgi y cli, cómo comprobar el modo de ejecución y por qué determina el riesgo y el reinicio.

Fuente: https://phpsos.de/es/php/sapi-erklaert/  
Actualizado: 25/10/2026  
Proveedor: PHP SOS, Ayuda de emergencia para PHP y seguridad de servidores. Ayuda inmediata por WhatsApp: https://wa.me/491736494914?text=Hola%20PHP%20SOS%2C%20necesitamos%20ayuda%20con%20nuestro%20servidor%20PHP.%20Empresa%3A%20%E2%80%A6%20Sitio%20web%3A%20%E2%80%A6

**En resumen:** SAPI son las siglas de Server Application Programming Interface, la interfaz mediante la cual PHP habla con su entorno. Las SAPI típicas son `fpm-fcgi` (PHP-FPM), `apache2handler` (mod_php), `cgi-fcgi` (php-cgi), `litespeed` y `cli` para la línea de comandos. La SAPI determina cómo llegan las peticiones, qué php.ini se aplica y qué procesos deben reiniciarse tras una actualización. En PHP2Shell, incluso la clasificación del riesgo depende de ella.

## ¿Qué es una SAPI?

PHP es un programa que ejecuta código. Para poder entregar páginas web necesita una conexión con un servidor web, con la línea de comandos o con otra aplicación. Esa conexión es la SAPI. Recibe los datos de la petición, los pasa a la [Zend Engine](https://phpsos.de/es/php/zend-engine/) y devuelve la salida.

Se puede imaginar la SAPI como un enchufe: el motor sigue siendo el mismo, pero según el enchufe encaja en Apache, en Nginx mediante FastCGI, en LiteSpeed o en el terminal. Cada variante tiene sus propias fortalezas, sus propias vías de configuración y sus propias trampas.

La SAPI decide sobre todo tres cosas que importan en el día a día:

1. **Modelo de procesos:** ¿PHP se ejecuta dentro del servidor web, como servicio propio con workers permanentes o como proceso de corta duración por cada invocación?
2. **Configuración:** ¿qué php.ini se lee y dónde pueden figurar ajustes adicionales, por ejemplo en `.htaccess`, en un `.user.ini` o en el pool de FPM?
3. **Permisos y separación:** ¿con qué usuario se ejecuta el código y se pueden separar varios sitios web entre sí?

En los paneles de hosting, las SAPI aparecen con otros nombres. Plesk habla, por ejemplo, de handlers de PHP como «FPM application», «FastCGI application» o «Apache module». Se refieren a los mismos modos de ejecución que describe esta página. En caso de duda ayuda el archivo de prueba que aparece más abajo, que muestra el nombre real de la SAPI.

## ¿Qué SAPI de PHP existen?

El manual de PHP menciona para `php_sapi_name()`, entre otros, estos valores de retorno: `apache`, `apache2handler`, `cgi` (hasta PHP 5.3), `cgi-fcgi`, `cli`, `cli-server`, `embed`, `fpm-fcgi`, `litespeed` y `phpdbg`. La lista expresamente no es exhaustiva.

| Nombre de la SAPI | Modo de ejecución | Uso típico | Modelo de procesos |
|---|---|---|---|
| `fpm-fcgi` | PHP-FPM | Nginx, Apache con `proxy_fcgi`, paneles de hosting | servicio propio con pools de workers |
| `apache2handler` | mod_php | servidores Apache antiguos, imágenes Docker sencillas | PHP dentro del proceso de Apache |
| `cgi-fcgi` | php-cgi | instalaciones antiguas, algunas configuraciones de Windows | un proceso por petición o FastCGI |
| `litespeed` | LSAPI | servidor web LiteSpeed, muchos proveedores de hosting compartido | procesos de PHP propios |
| `cli` | línea de comandos | tareas cron, Composer, scripts de mantenimiento | un proceso por invocación |
| `cli-server` | servidor web integrado | solo desarrollo local (`php -S`) | un servidor de desarrollo |
| `embed` | integrada | PHP dentro de otros programas | depende del programa |
| `phpdbg` | depurador | búsqueda de errores | interactivo |

FrankenPHP es un servidor de aplicaciones moderno que integra PHP directamente. También está afectado por PHP2Shell y tiene sus propias vías de actualización; detalles en [Proteger FrankenPHP](https://phpsos.de/es/server/frankenphp/).

## Cómo comprobar la SAPI de su servidor

La SAPI de un sitio web solo se averigua a través del servidor web, no mediante la línea de comandos. Basta un pequeño archivo de prueba:

```php
<?php
// sapi-check.php: borrar de inmediato después de llamarlo
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";
```

En la línea de comandos se pueden listar, solo en modo lectura, las variantes y los servicios instalados:

```bash
php -r 'echo PHP_SAPI, PHP_EOL;'          # siempre "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # versiones de FPM instaladas
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # ¿mod_php cargado?
```

## Por qué cada SAPI puede tener su propio php.ini

Según el manual de PHP, PHP busca primero un archivo `php-SAPI.ini`, por ejemplo `php-cli.ini`, y solo después `php.ini`. Distribuciones como Debian y Ubuntu van más allá y crean carpetas propias para cada SAPI, por ejemplo `/etc/php/8.3/fpm/` y `/etc/php/8.3/cli/`.

También difiere el momento: en los módulos de servidor, PHP lee la configuración, según el manual, solo una vez al iniciar el servidor web; en CGI y CLI, en cada invocación. Por eso, quien cambia un ajuste debe saber qué SAPI está afectada. Más información en [El php.ini explicado](https://phpsos.de/es/php/php-ini-erklaert/).

## SAPI y seguridad: lo que ha mostrado PHP2Shell

Según los informes, PHP2Shell afecta a PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP y LiteSpeed. El equipo de PHP clasifica el riesgo como más alto en mod_php, porque allí se demostró un exploit antes de que se ejecute código de la aplicación. Los motivos están en [Por qué mod_php soporta el mayor riesgo](https://phpsos.de/es/php2shell/mod-php-risiko/).

Para la operación, la SAPI significa sobre todo una cosa: determina qué hay que reiniciar tras la actualización.

1. **PHP-FPM:** todos los pools y workers de cada versión instalada
2. **mod_php:** el servicio completo de Apache, no solo un reload
3. **php-cgi y configuraciones FastCGI:** todos los procesos de PHP restantes
4. **LiteSpeed:** los procesos de PHP del servidor web según las instrucciones del fabricante
5. **CLI:** no hay procesos permanentes, pero hay que actualizar también el paquete para que las comprobaciones sean correctas

A medio plazo compensa abandonar mod_php. El manual de PHP recomienda para las instalaciones nuevas de Apache PHP-FPM con `mod_proxy_fcgi`. Los fundamentos los describe [PHP-FPM explicado](https://phpsos.de/es/php/php-fpm-erklaert/).

## ¿Cómo ayuda PHP SOS en concreto?

- **Inventariar las SAPI:** averiguamos para cada servidor qué modos de ejecución y qué versiones de PHP están realmente activos.
- **Reiniciar correctamente:** mediante el [servicio de parcheo de PHP](https://phpsos.de/es/leistungen/php-patch-service/) actualizamos cada SAPI y demostramos el reinicio de todos los procesos.
- **Asignar la configuración:** mostramos qué php.ini y qué ajustes de pool se aplican a su sitio web.
- **Planificar el cambio:** donde se ejecuta mod_php o php-cgi, planificamos y probamos el cambio a PHP-FPM.


## Preguntas frecuentes

**¿Cómo averiguo qué SAPI utiliza mi sitio web?**  
De la forma más fiable con un archivo de prueba colocado de forma breve que muestre PHP_SAPI o php_sapi_name(), llamado a través del servidor web. En la línea de comandos siempre obtendrá cli, lo que no dice nada sobre el sitio web. Después, borre el archivo de prueba de inmediato.

**¿Qué SAPI es la más segura?**  
Ninguna es segura por sí misma. Pero PHP-FPM ofrece las mejores herramientas de separación: pools propios, usuarios propios y ajustes bloqueados para cada sitio web. El manual de PHP aconseja expresamente PHP-FPM en lugar de mod_php para las instalaciones nuevas de Apache.

**¿Está afectada por PHP2Shell la versión de PHP de la línea de comandos?**  
Los informes conocidos mencionan PHP-FPM, mod_php, php-cgi, FrankenPHP y LiteSpeed. La CLI no procesa peticiones de la red. Pero suele proceder del mismo origen de paquetes y debería actualizarse siempre también, aunque solo sea para que los comandos de comprobación muestren el estado correcto.

**¿Puede un servidor usar varias SAPI a la vez?**  
Sí, e incluso es lo habitual. Casi todos los servidores tienen, además de la SAPI web, la CLI para tareas cron y mantenimiento. A menudo se ejecutan además varias versiones de PHP-FPM en paralelo. Cada una de ellas debe actualizarse y reiniciarse por separado.

## Fuentes

- [Manual de PHP: php_sapi_name()](https://www.php.net/manual/en/function.php-sapi-name.php)
- [Manual de PHP: archivo de configuración](https://www.php.net/manual/en/configuration.file.php)
- [Manual de PHP: Apache 2 en Unix](https://www.php.net/manual/en/install.unix.apache2.php)
- [php.net: avisos de seguridad](https://www.php.net/)
