Este artículo explica en detalle el mecanismo operativo subyacente de PHP, incluido el funcionamiento del contenido PHP, y explica todo el ciclo de vida de PHP desde el inicio hasta el final con ejemplos.
Introducción
Nunca iniciamos manualmente el proceso relacionado con PHP, se ejecuta con el inicio de Apache; PHP está conectado a Apache a través del módulo mod_php5.so (específicamente, SAPI, la interfaz de programación de aplicaciones del servidor
tiene un total de tres módulos): kernel, motor Zend y capa de extensión; el kernel PHP se usa para manejar solicitudes, flujos de archivos, manejo de errores y otras operaciones relacionadas. El motor Zend (ZE) se usa para convertir archivos fuente a lenguaje de máquina y luego ejecutarlos en una máquina virtual; La capa de extensión es un conjunto de funciones, bibliotecas y flujos que PHP utiliza para realizar operaciones específicas. Por ejemplo, necesitamos la extensión mysql para conectarnos a la base de datos MySQL; cuando ZE ejecuta el programa, es posible que deba conectarse a varias extensiones. En este momento, ZE entrega el control a la extensión y lo devuelve después de procesar la tarea específica. ;
finalmente, ZE devuelve los resultados de ejecución del programa al kernel PHP, que luego transmite los resultados a la capa SAPI y finalmente los envía al navegador.
No es tan sencilloahondar en
el funcionamiento interno de la realidad. El proceso anterior es solo una versión simplificada, profundicemos un poco más para ver qué más sucede detrás de escena.
◆Después de que se inicia Apache, también se inicia el intérprete de PHP;
◆El proceso de inicio de PHP tiene dos pasos:
El primer paso es inicializar algunas variables de entorno, que tendrán efecto durante todo el ciclo de vida de SAPI;
El segundo paso es generar algunas configuraciones variables que solo sean específicas de la solicitud actual.
es el primer paso al iniciar PHP
? ¿Cuáles son el primer y segundo paso? No se preocupe, discutiremos esto en detalle a continuación. Veamos primero el primer paso y el más importante. Lo que hay que recordar es que el primer paso de la operación ocurre antes de que llegue cualquier solicitud.
Después de iniciar Apache, el intérprete de PHP también se inicia;
PHP llama al método MINIT de cada extensión, cambiando así estas extensiones a un estado disponible. Observe qué extensiones se abren en el archivo php.ini; MINIT significa "inicialización del módulo". Cada módulo define un conjunto de funciones, bibliotecas de clases, etc. para manejar otras solicitudes.
Un método MINIT típico es el siguiente:
PHP_MINIT_FUNCTION(nombre_extensión){
/* Inicializa funciones, clases, etc. */
}
PHP inicia el segundo paso.
Cuando se produce una solicitud de página, la capa SAPI cede el control a la capa PHP. Entonces PHP establece las variables de entorno necesarias para responder a esta solicitud. Al mismo tiempo, también crea una tabla de variables para almacenar nombres de variables y valores generados durante la ejecución.
PHP llama al método RINIT de cada módulo, que es "solicitud de inicialización". Un ejemplo clásico es el RINIT del módulo Session. Si el módulo Session está habilitado en php.ini, la variable $_SESSION se inicializará y el contenido relevante se leerá cuando se llame al RINIT del módulo
; ser considerado como un El proceso de preparación comienza automáticamente entre ejecuciones del programa.
Un método RINIT típico es el siguiente:
PHP_RINIT_FUNCTION(extension_name) {
/* Inicializa variables de sesión, rellena previamente variables, redefine variables globales, etc. */
}
El primer paso para apagar PHP
es el mismo que el inicio de PHP. El apagado de PHP también se divide en dos pasos:
una vez que se ejecuta la página (ya sea que llegue al final del archivo o finalice con la función salir o morir), PHP se iniciará. el proceso de limpieza. Llamará al método RSHUTDOWN de cada módulo en secuencia.
RSHUTDOWN se utiliza para borrar la tabla de símbolos generada cuando el programa se está ejecutando, es decir, para llamar a la función desarmada en cada variable.
Un método RSHUTDOWN típico es el siguiente:
PHP_RSHUTDOWN_FUNCTION(extension_name) {
/* Realizar gestión de memoria, desarmar todas las variables utilizadas en la última llamada PHP, etc. */
}
segundo paso del cierre de PHP
, todas las solicitudes han sido procesadas y SAPI está listo para cerrarse. PHP comienza a ejecutar el segundo paso:
PHP llama al método MSHUTDOWN de cada extensión. para liberar la memoria.
Un método RSHUTDOWN típico es el siguiente:
PHP_MSHUTDOWN_FUNCTION(extension_name) {
/* Controladores libres y memoria persistente, etc. */
}
De esta forma, se completa todo el ciclo de vida de PHP. Cabe señalar que "iniciar el primer paso" y "cerrar el segundo paso" solo se ejecutarán cuando no haya ninguna solicitud del servidor.