>  기사  >  백엔드 개발  >  생명주기의 그래픽 코드에 대한 PHP 커널의 자세한 설명

생명주기의 그래픽 코드에 대한 PHP 커널의 자세한 설명

黄舟
黄舟원래의
2017-03-09 09:31:472190검색

PHP 생명주기를 이해하기에 앞서, 먼저 Apache와 php의 관계부터 알아보겠습니다~

1. Apache 운영 메커니즘 분석


---------------





전체 구성은 다음과 같습니다.




Apache 후크 메커니즘 Apache의 후크 메커니즘은 다음을 의미합니다. Apache에서는 모듈(내부 모듈 및 외부 모듈 포함)을 허용합니다. 🎜 >예: mod_php5.so, mod_perl.so 등 ) 요청 처리 루프에 사용자 정의 함수를 삽입합니다. 즉, 모듈은 Apache의 모든 처리 단계에서 자체 처리 기능을 연결하여 Apache의 요청 처리 프로세스에 참여할 수 있습니다.

mod_php5.so/ php5apache2.dll은 Hook 메커니즘을 통해 포함된 사용자 정의 함수를 Apache에 주입하는 것이며 Apache 처리의 각 단계에서 PHP 요청 처리를 담당합니다. 프로세스 .

이제 Apache가 PHP에 어떻게 연결되는지 알았으니, Apache가 PHP로 전송된 후 프로세스 로직을 살펴보겠습니다.


2.PHP 실행 프로세스 그림

PHP 시작 및 종료 단계

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


2.1 SAPI 실행 PHP 여러 가지 단계 통과

  1. 모듈 초기화 단계(Module init)

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

  1. 요청 초기화 단계(Request init)

클라이언트의 요청을 수락한 후 각 확장의 PHP_RINIT_FUNCTION 메소드를 사용하여 PHP 스크립트의 실행 환경을 초기화합니다.

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

  2. 종료 요청

이때, 각 확장의 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는 이 요청에 대한 스크립트를 실행하는 데 필요한 환경 변수를 초기화합니다.

예를 들어 다음과 같습니다. 세션 모듈의 RINIT. php.ini에서 세션 모듈이 활성화된 경우 이 모듈의 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生命周期就结束了。要注意的是,只有在服务器没有请求的情况下才会执行“启动第一步”和“关闭第二步”。




위 내용은 생명주기의 그래픽 코드에 대한 PHP 커널의 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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