이 글은 주로 PHP 라이프사이클을 소개합니다. PHP 라이프사이클을 이해하기 전에, 관심 있는 친구들이 참고하면 도움이 될 것입니다.
1.Apache 운영 메커니즘 분석
--------------- --- --
전체 다이어그램은 다음과 같습니다.
Apache 후크 메커니즘 Apache의 후크 메커니즘은 다음을 의미합니다. Apache는 모듈(내부 모듈 및 외부 모듈 포함,
mod_php5.so, mod_perl.so 등 )에 사용자 정의 기능을 삽입할 수 있도록 허용합니다. 요청 처리 루프에 들어갑니다. 즉, 모듈은 Apache의 모든 처리 단계에서 자체 처리 기능을 연결하여 Apache의 요청 처리 프로세스에 참여할 수 있습니다.
mod_php5.so/ php5apache2.dll은 Hook 메커니즘을 통해 포함된 사용자 정의 함수를 Apache에 주입하는 것이며 Apache 처리 프로세스의 각 단계에서 PHP 요청 처리를 담당합니다.아파치가 PHP에 어떻게 연결되는지 알았으니, 이제 아파치가 PHP로 전송된 후의 프로세스 로직을 살펴보겠습니다.
PHP 시작 및 종료 단계
PHP는 실행이 시작된 후 두 가지 주요 단계를 거칩니다. : 요청을 처리하기 전의 시작 단계와 요청 후의 종료 단계입니다.
2.1 SAPI가 PHP를 실행할 때 거치는 여러 단계
즉, 각 확장 소스 코드에서 PHP_MINIT_FUNCTION의 메소드를 호출하여 모듈 초기화, 모듈에 필요한 일부 변수 적용, 메모리 할당 등을 수행합니다.
Request init
클라이언트의 요청을 받은 후, 확장된 각 PHP_RINIT_FUNCTION의 메소드가 호출되어 PHP 스크립트의 실행 환경을 초기화합니다.
PHP 스크립트를 실행합니다(이 단계는 대부분의 PHP 프로그래머에게 친숙해야 하며, 작성한 코드는 여기에서 실행됩니다)
Request Shutdown
이때 PHP_RSHUTDOWN_FUNCTION 각 확장의 메소드가 호출되어 요청 사이트를 정리하고 ZE는 변수와 메모리를 재활용하기 시작합니다
모듈 닫기(모듈 종료)
웹 서버가 종료되거나 명령줄 스크립트가 실행 종료하면 다음 링크를 통해 확장 소스 코드
에서 PHP_MSHUTDOWN_FUNCTION 메서드를 호출합니다. 시작 - 요청 시작 - 요청 닫기 - 종료 SAPI 인터페이스 구현이 수명 주기를 완료합니다
2.2 시작 단계
2.2.1 모듈 초기화 단계MINIT
전체 SAPI 수명 주기 동안(예: Apache가 시작된 후) 전체 수명 주기 또는 명령줄 프로그램의 전체 실행 프로세스), 이 프로세스는 한 번만 수행됩니다.
Apache를 시작한 후 PHP 인터프리터도 시작됩니다.
PHP는 각 확장(모듈)의 MINIT 메서드를 호출하여 이러한 확장을 사용 가능한 상태로 전환합니다.
//새로운 DLL 모듈이 도입되면 Apache를 다시 시작해야 하는 이유이기도 합니다. php.ini
2.2.2 모듈 활성화 단계 RINIT
该过程发生在请求阶段, 例如通过url请求某个页面,则在每次请求之前都会进行模块激活(RINIT请求开始)。
请求到达之后,SAPI层将控制权交给PHP层,PHP初始化本次请求执行脚本所需的环境变量
例如是Session模块的RINIT,如果在php.ini中启用了Session 模块,那在调用该模块的RINIT时就会初始化$_SESSION变量,并将相关内容读入; 然后PHP会调用所有模块RINIT函数,即“请求初始化”。
在这个阶段各个模块也可以执行一些相关的操作, 模块的RINIT函数和MINIT函数类似 ,RINIT方法可以看作是一个准备过程,在程序执行之前就会自动启动。
PHP_RINIT_FUNCTION(extension_name) { /* Initialize session variables, pre-populate variables, redefine global variables etc */ }
2.3结束阶段
请求处理完后就进入了结束阶段, 一般脚本执行到末尾或者通过调用exit()或者die()函数,PHP都将进入结束阶段. 和开始阶段对应,结束阶段也分为两个环节,一个在请求结束后(RSHUWDOWN),一个在SAPI生命周期结束时(MSHUTDOWN).、
2.3.1请求结束后(RSHUWDOWN)
请求处理完后就进入了结束阶段,PHP就会启动清理程序。
它会按顺序调用各个模块的RSHUTDOWN方法。
RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。
PHP_RSHUTDOWN_FUNCTION(extension_name) { /* Do memory management, unset all variables used in the last PHP call etc */ }
2.3.2 SAPI生命周期结束时(MSHUTDOWN)
最后,所有的请求都已处理完毕
SAPI也准备关闭了
PHP调用每个扩展的MSHUTDOWN方法
这时各个模块最后一次释放内存的机会。
(这个是对于CGI和CLI等SAPI,没有“下一个请求”,所以SAPI立刻开始关闭。)
PHP_MSHUTDOWN_FUNCTION(extension_name) { /* Free handlers and persistent memory etc */ }
전체 PHP 수명주기가 끝났습니다. "1단계 시작"과 "2단계 종료"는 서버의 요청이 없는 경우에만 실행된다는 점에 유의하세요.
관련 권장사항:
thinkPHP5.0 프레임워크 애플리케이션 요청 라이프사이클 분석
React Native의 삶 부품 기간은 얼마나 되나요
위 내용은 PHP 수명주기 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!