Comprender el modo operativo PHP

PHP tiene cinco modos operativos, cuatro de los cuales son comunes:

  1. CGI (interfaz de puerta de enlace común)
  2. FastCGI (CGI residente / CGI de larga duración)
  3. CLI (interfaz de línea de comandos)
  4. LoadModule 【Exclusivo de Apache】
  5. ISAPI (Interfaz de programa de aplicación de servidor de Internet) [IIS exclusivo]

Nota: Después de PHP5.3, PHP ya no tiene el modo ISAPI y no hay más archivos php5isapi.dll después de la instalación. Para usar una versión superior de PHP en IIS6, debe instalar la extensión FastCGI y luego habilitar IIS6 para que admita FastCGI.

Ver el modo de funcionamiento actual
echo php_sapi_name ();

Modo CGI

Introducción:

CGI significa Common Gateway Interface (Interfaz de puerta de enlace común). Es un programa. En términos simples, CGI es como un puente que conecta la página web y el programa de ejecución en el servidor web. Pasa las instrucciones recibidas por HTML al programa de ejecución del servidor. , Y luego devuelva el resultado del programa de ejecución del servidor a la página HTML. CGI tiene un excelente rendimiento multiplataforma y se puede implementar en casi cualquier sistema operativo.

Proceso de llamada: modo Fork-And-Execute

Solicitud del usuario -> el servidor web recibe la solicitud [Nginx, apache de uso común] -> proceso secundario CGI de bifurcación y solicitud de procesamiento ----> Después de que se procesa la solicitud, devuelva el resultado al servidor web y destruya el proceso secundario -> el servidor web devuelve el resultado al usuario

Ilustración:
Inserte la descripción de la imagen aquí
Ventajas:

Como el primer modo operativo de PHP, cada solicitud se procesa de forma independiente, el proceso de llamada es simple y lo suficientemente claro, y la capacidad de control es fuerte.Los
procesos están aislados para garantizar que los datos no se contaminen.

Desventajas:

Cada solicitud necesita bifurcar un nuevo subproceso CGI. Si se solicitan mil solicitudes simultáneas al mismo tiempo, significa que se bifurcarán mil subprocesos. Esto causará varios problemas:

  1. El proceso secundario de Fork requiere tiempo y memoria [copia en escritura]
  2. Demasiados procesos secundarios harán que la CPU dedique mucho tiempo al cambio de contexto
  3. Recargar recursos relacionados para cada solicitud

Modo FastCGI

Introducción:

FastCGI es una versión mejorada de CGI. FastCGI es como un CGI de larga duración. Al iniciar el servidor web, carga el administrador de procesos FastCGI [PHP-FPM, IIS ISAPI, Apache Module] y cuando llega una solicitud En ese momento, el servidor web solo necesita ser manejado por el administrador de procesos FastCGI.
Proceso de llamada: tome PHP-FPM como ejemplo

Cuando se inicia el servidor web, inicia el proceso maestro PHP-FPM (principalmente responsable de la asignación de solicitudes a procesos secundarios inactivos) y un cierto número de procesos secundarios fast-cgi (responsables de procesar solicitudes). El proceso maestro PHP-FPM administra un grupo de procesos. Hay varios procesos secundarios fast-cgi en el grupo, y cada proceso secundario fast-cgi maneja una solicitud por separado sin interferir entre sí.

Solicitud de usuario -> el servidor web recibe la solicitud [Nginx, apache de uso común] -> solicitud de PHP detectada y reenviada al proceso maestro de FPM -> proceso maestro de FPM especifica el proceso secundario inactivo fast-cgi para procesar la solicitud -> el proceso secundario carga archivos (como php.ini) y otras solicitudes de procesamiento de recursos -> El procesamiento finaliza y se borran los recursos, el resultado se devuelve al maestro y el proceso secundario se bloquea, marcado como inactivo -> maestro devuelve el resultado al servidor web -> el servidor web devuelve el resultado al usuario

Ilustración:
Inserte la descripción de la imagen aquí
Ventajas:

  1. Desde el punto de vista de la estabilidad, FastCGI ejecuta CGI en un grupo de procesos separado.Cuando un solo proceso muere, el sistema puede descartarlo fácilmente y luego reasignar un nuevo proceso para ejecutar la lógica.
  2. Desde la perspectiva de la seguridad, FastCGI y el servidor web anfitrión son completamente independientes, y FastCGI no afectará el funcionamiento del servidor web [si PHP-FPM está cerrado, devolverá 502 puerta de enlace incorrecta al usuario]
  3. Desde el punto de vista del rendimiento, FastCGI separa el procesamiento de la lógica dinámica del servidor web, y el procesamiento de IO de carga pesada todavía se deja al servidor host, de modo que el servidor host puede concentrarse en IO [Para una página web dinámica ordinaria, el procesamiento lógico solo Una pequeña parte, más es la carga de recursos estáticos como imágenes]

Desventajas:

Un proceso secundario fast-cgi solo puede manejar una solicitud a la vez, por lo que el rendimiento simultáneo del sitio web está limitado por la cantidad de procesos secundarios.
Si hay demasiados procesos abiertos, la CPU perderá mucho tiempo en el cambio de contexto del proceso.
Cada vez que se solicita un proceso hijo fast-cgi, los recursos relevantes deben recargarse y los recursos deben liberarse cuando finaliza la solicitud

CLI (interfaz de línea de comandos)

Introducción:

El modo php-cli pertenece al modo de línea de comandos. Para muchos desarrolladores que acaban de empezar a aprender php e iniciaron wamp, wnmp es el modo operativo menos familiar.
Este modo no necesita depender de otros programas, ingrese directamente php xx.php para ejecutar El
modo de línea de comando del código php es obviamente diferente del modo web normal:
no hay un período de tiempo de espera. El
búfer del búfer está desactivado de forma predeterminada.
STDIN y STDOUT estándar de entrada / salida / error uso
echo var_dump, phpinfo y otras salidas se envían directamente a la consola.
Clases / funciones disponibles
Configuración diferente de php.ini

PD: consulte el documento oficial para obtener más detalles: https://www.php.net/manual/zh/features.commandline.php

LoadModule (exclusivo de Apache)

Introducción: El
modo de módulo está integrado en forma de módulo mod_php5. En este momento, la función del módulo mod_php5 es recibir solicitudes de archivos PHP pasadas por Apache, procesar estas solicitudes y luego devolver los resultados procesados ​​a Apache.
En el archivo de configuración de Apache httpd.conf, el módulo de carga php7_module "D: /.../ php71 / php7apache2_4.dll" que generalmente se agrega juega el papel de este

Proceso de llamada:

Solicitud del usuario -> Servidor Apache -> Llamar al módulo mod_php5 para procesar la solicitud -> Devolver el resultado de la solicitud a Apache -> Apache devuelve el resultado al usuario

Ilustración:
Inserte la descripción de la imagen aquí

ISAPI (Interfaz de programa de aplicación de servidor de Internet)

Introducción:

Después de PHP5.3, PHP ya no tiene el modo ISAPI y no hay más archivos php5isapi.dll después de la instalación. Para usar una versión superior de PHP en IIS6, debe instalar la extensión FastCGI y luego habilitar IIS6 para que admita FastCGI. Así que no presentaré demasiado aquí.

Ilustración:
Inserte la descripción de la imagen aquí

Escrito al final:

En el explosivo desarrollo actual de Internet, la mayoría de los sitios web deben considerar el alto rendimiento simultáneo del sitio web. Nginx es cada vez más favorecido por los desarrolladores debido a su peso ligero y su excelente rendimiento simultáneo. La combinación LAMP que alguna vez fue popular en toda la red ya no es la primera opción para los desarrolladores de PHP. La combinación LNMP recién emergente se ha convertido en un curso obligatorio para PHPer, lo que ha llevado al hecho de que el modo LoadModule basado en Apache se menciona cada vez menos.
Además, el modo CLI utilizado para escribir scripts de línea de comandos y el modo ISAPI casi extinto obviamente no son adecuados para crear sitios web.
Como una versión mejorada de CGI, el modo Fast-CGI usa PHP-FPM para administrar procesos secundarios sobre la base de heredar la simplicidad y seguridad de CGI, haciendo que el servidor web esté más enfocado en el procesamiento de E / S. PHP-FPM administra y mantiene un grupo de procesos, que puede ser avanzado Bifurca un cierto número de procesos secundarios que esperan procesar la solicitud, ni bifurca el proceso secundario cuando llega la solicitud, ni necesita destruir el proceso secundario al final de la solicitud.

Supongo que te gusta

Origin blog.csdn.net/weixin_39815001/article/details/107690270
Recomendado
Clasificación