>  기사  >  백엔드 개발  >  PHP 수명주기 분석

PHP 수명주기 분석

墨辰丷
墨辰丷원래의
2018-05-15 15:09:433700검색

이 글은 주로 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로 전송된 후의 프로세스 로직을 살펴보겠습니다.


2.PHP 실행 흐름 다이어그램

PHP 시작 및 종료 단계

PHP는 실행이 시작된 후 두 가지 주요 단계를 거칩니다. : 요청을 처리하기 전의 시작 단계와 요청 후의 종료 단계입니다.


2.1 SAPI가 PHP를 실행할 때 거치는 여러 단계

    Module init

즉, 각 확장 소스 코드에서 PHP_MINIT_FUNCTION의 메소드를 호출하여 모듈 초기화, 모듈에 필요한 일부 변수 적용, 메모리 할당 등을 수행합니다.

  1. Request init

클라이언트의 요청을 받은 후, 확장된 각 PHP_RINIT_FUNCTION의 메소드가 호출되어 PHP 스크립트의 실행 환경을 초기화합니다.

  1. PHP 스크립트를 실행합니다(이 단계는 대부분의 PHP 프로그래머에게 친숙해야 하며, 작성한 코드는 여기에서 실행됩니다)

  2. Request Shutdown

이때 PHP_RSHUTDOWN_FUNCTION 각 확장의 메소드가 호출되어 요청 사이트를 정리하고 ZE는 변수와 메모리를 재활용하기 시작합니다

  1. 모듈 닫기(모듈 종료)

웹 서버가 종료되거나 명령줄 스크립트가 실행 종료하면 다음 링크를 통해 확장 소스 코드



에서 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 프레임워크 애플리케이션 요청 라이프사이클 분석

vue 컴포넌트 라이프사이클 사용 방법


React Native의 삶 부품 기간은 얼마나 되나요


위 내용은 PHP 수명주기 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.