Este artigo explica em detalhes o mecanismo operacional subjacente do PHP, incluindo a operação do conteúdo do PHP, e explica todo o ciclo de vida do PHP, desde a inicialização até o final, com exemplos.
Introdução
Nunca iniciamos manualmente o processo relacionado ao PHP, ele é executado com a inicialização do Apache. O PHP está conectado ao Apache através do módulo mod_php5.so (especificamente, SAPI, a interface de programação do aplicativo do servidor PHP)
; kernel, mecanismo Zend e camada de extensão PHP kernel é usado para lidar com solicitações, fluxos de arquivos, tratamento de erros e outras operações relacionadas; mecanismo Zend (ZE) é usado para converter arquivos de origem em linguagem de máquina e depois executá-los em uma máquina virtual; A camada de extensão é um conjunto de funções, bibliotecas e fluxos que o PHP usa para realizar operações específicas. Por exemplo, precisamos da extensão mysql para conectar-se ao banco de dados MySQL. Quando o ZE executa o programa, pode ser necessário conectar-se a várias extensões. Neste momento, o ZE transfere o controle para a extensão e o retorna após processar a tarefa específica. ;
finalmente, ZE retorna os resultados da execução do programa para o kernel do PHP, que então transmite os resultados para a camada SAPI e finalmente os envia para o navegador.
Não é tão simplesmergulhar no
funcionamento interno da realidade. O processo acima é apenas uma versão simplificada, vamos nos aprofundar um pouco mais para ver o que mais está acontecendo nos bastidores.
◆Após iniciar o Apache, o interpretador PHP também inicia;
◆O processo de inicialização do PHP consiste em duas etapas:
O primeiro passo é inicializar algumas variáveis de ambiente, que entrarão em vigor durante todo o ciclo de vida do SAPI;
A segunda etapa é gerar algumas configurações de variáveis específicas apenas para a solicitação atual.
é o primeiro passo ao iniciar o PHP
. Quais são o primeiro e o segundo passo? Não se preocupe, discutiremos isso em detalhes a seguir. Vejamos primeiro o primeiro e mais importante passo. É importante lembrar que a primeira etapa da operação acontece antes da chegada de qualquer solicitação.
Depois de iniciar o Apache, o interpretador PHP também inicia
o PHP chama o método MINIT de cada extensão, alternando assim essas extensões para um estado disponível; Dê uma olhada em quais extensões estão abertas no arquivo php.ini; MINIT significa "inicialização do módulo". Cada módulo define um conjunto de funções, bibliotecas de classes, etc. para lidar com outras solicitações.
Um método MINIT típico é o seguinte:
PHP_MINIT_FUNCTION(extension_name){
/* Inicializa funções, classes etc */
}
O PHP inicia a segunda etapa.
Quando ocorre uma solicitação de página, a camada SAPI transfere o controle para a camada PHP. Portanto, o PHP define as variáveis de ambiente necessárias para responder a esta solicitação. Ao mesmo tempo, também cria uma tabela de variáveis para armazenar nomes de variáveis e valores gerados durante a execução.
O PHP chama o método RINIT de cada módulo, que é "solicitação de inicialização". Um exemplo clássico é o RINIT do módulo Session. Se o módulo Session estiver habilitado no php.ini, a variável $_SESSION será inicializada e o conteúdo relevante será lido quando o RINIT do módulo for chamado
; ser considerado como um O processo de preparação começa automaticamente entre as execuções do programa.
Um método RINIT típico é o seguinte:
PHP_RINIT_FUNCTION(extension_name) {
/* Inicializa variáveis de sessão, preenche previamente variáveis, redefine variáveis globais etc. */
}
A primeira etapa do desligamento do PHP
é igual à inicialização do PHP. O desligamento do PHP também é dividido em duas etapas:
Assim que a página for executada (seja ela chegando ao final do arquivo ou encerrada com a função exit ou die), o PHP será iniciado. o processo de limpeza. Ele chamará o método RSHUTDOWN de cada módulo em sequência.
RSHUTDOWN é utilizado para limpar a tabela de símbolos gerada durante a execução do programa, ou seja, para chamar a função unset em cada variável.
Um método RSHUTDOWN típico é o seguinte:
PHP_RSHUTDOWN_FUNCTION(extension_name) {
/* Faz o gerenciamento de memória, desativa todas as variáveis usadas na última chamada do PHP etc. */
}
da segunda etapa de encerramento do PHP
, todas as solicitações foram processadas e o SAPI está pronto para ser encerrado. O PHP inicia a execução da segunda etapa:
O PHP chama o método MSHUTDOWN de cada extensão. para liberar memória.
Um método RSHUTDOWN típico é o seguinte:
PHP_MSHUTDOWN_FUNCTION(extension_name) {
/* Manipuladores livres e memória persistente, etc. */
}
Desta forma, todo o ciclo de vida do PHP termina. Ressalta-se que “iniciar a primeira etapa” e “fechar a segunda etapa” somente serão executados quando não houver solicitação do servidor.