¿Cómo procesa PHP las peticiones?

procesadores_php_image_feature

Existen varios protocolos que se pueden utilizar al diseñar un servidor con PHP como analizador, cada uno presenta sus ventajas y te servirán al momento de implementar un servidor como Apache o Nginx.

CGI, FASTCGI Y PHP-FPM

Comencemos explicando como funciona la petición de un servidor para distribuir su contenido. En la siguiente gráfica podemos visualizar como sale una petición desde un Browser o explorador web hacia un servidor:

como_procesa_php_peticiones_peticion_browser

Un browser como Chrome, IExplorer, Edge, Firefox, interpreta código HTML y lo dibuja para mostrar al usuario, cuando el browser hace la petición pasa por internet mediante la url al Servidor de destino, este en el caso de ser un archivo digamos index.html lo que devuelve el servidor es código html que interpreta el browser y lo muestra al usuario, como vemos en la imagen superior, pero que pasa cuando la petición es a un archivo index.php

como_procesa_php_peticiones_flujo_peticion

Como nos muestra la imagen anterior cuando la petición es index.php ya no retorna la respuesta desde el servidor Apache o Nginx en este caso necesita ser traducida la respuesta, aquí es donde entra el procesador de php con los protocolos Cgi, FastCgi que envían la petición al procesador de PHP para que las interprete y las devuelva al servidor y este pueda retornar al browser.

Como se puede observar tenemos varios protocolos Cgi, FastCgi, pero cuales son sus características o diferencias vamos detallando eso.

Flujo del protocolo en php

Expliquemos en 2 métodos las peticiones para analizar el código de PHP.

Método 1:

Cuando tenemos una petición index.php se inicia el protocolo digamos el CGI, aquí está el analizador de PHP este llamará al archivo php.ini que inicia la ejecución para procesar la solicitud.

Luego de procesar la solicitud sale del proceso y el servidor web responde el resultado, este es un proceso Web PHP dinámico.

Método 2:

Aquí es utilizando el LoadModule en este caso en una configuración en Apache, esto podemos verlo en los archivos de configuración https.conf o httpd-xampp.conf.

como_procesa_php_peticiones_load_module_apache

El flujo que tenemos aquí es el siguiente, se utilizará LoadModule para cargar el phpX_module que lo que hace es ejecutar un submódulo dentro del Apache, entonces en una petición Web el servidor Apache llamara al módulo phpX_module para analizar el código que es PHP.

De esta manera la interfaz SAPI (Server Application Programming Interface) es la encargada de proporcionar la comunicación como un socket y es la que permite a PHP interactuar con aplicaciones como Apache – Nginx.

Entonces el proceso de petición queda de la siguiente manera:

apache -> httpd -> phpx_module -> sapi -> php

Lo que se ve anteriormente es que cada petición de apache genera un proceso se puede ver en desventaja en el caso que existan varios usuarios que puedan colapsar el servidor con muchos procesos al mismo tiempo.

CGI

CGI (Common Gateway Interface) es otra herramienta que nos permite comunicar una aplicación Web con una aplicación PHP, CGI es un programa que se puede escribir en cualquier lenguaje como puede ser Php, perl, etc.

La manera en la que recibe la consulta es mediante una petición POST, cada petición que le llega al CGI este debe analizar con PHP según los parámetros de entrada y emitir una salida al servidor Web para que este le retorne al cliente.

Como ventaja en este método podemos decir que al interactuar CGI como intermediario lo hace independiente de cualquier servidor.

FASTCGI

FastCGI es fundamental para mejorar el rendimiento de programas CGI, es decir puede crear varias peticiones CGI, su trabajo es mantener el proceso del CGI en memoria para mejorar el rendimiento, esto permite tener un mayor rendimiento y escalabilidad, tomando en cuenta que también se puede ejecutar en host distintos del servidor y acepta solicitudes de otros servidores.

PHP-FPM

Viene a partir de la versión 5.3 de PHP y fue creado para solventar problemas que presenta php-cgi, es una implementación de FastCGI y lo que hace es administrar grupos de procesos para manejar solicitudes del servidor Web.

Como php-cgi es solo un programa CGI lo que hace es recibir una petición y generar un resultado pero no ayuda a gestionar el proceso.

Si queremos crear un servidor en PHP podemos utilizar

Apache-Nginx -> FastCGI -> PhpFpm ó

Apache-Nginx -> CGI -> php-cgi ó

Apache-Nginx -> Módulo de carga ó

Apache-Nginx -> CGI.

Que sapi usamos

Para ver que SAPI estamos utilizando podemos realizar un programa en .php que contenga:

 

<?php

echo php_sapi_name();
phpinfo();


?>.

como_procesa_php_peticiones_php_info

Como se puede ver en este caso se está utilizando Apache 2.0 Handler porque tenemos una instalación Xampp.

Averigua que SAPI usas en tu PHP y si te fue de utilidad esta información compártela en tus redes sociales y no olvides suscribirte a nuestro canal.

Leave a Reply

Your email address will not be published. Required fields are marked *