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 여러 가지 단계 통과
모듈 초기화 단계(Module init)
즉, 각 확장 소스 코드에서 PHP_MINIT_FUNCTION의 메소드를 호출하여 모듈 초기화, 모듈에 필요한 일부 변수 적용, 메모리 할당 등을 수행합니다.
요청 초기화 단계(Request init)
클라이언트의 요청을 수락한 후 각 확장의 PHP_RINIT_FUNCTION 메소드를 사용하여 PHP 스크립트의 실행 환경을 초기화합니다.
PHP 스크립트를 실행합니다(이 단계는 대부분의 PHP 프로그래머에게 익숙할 것이며 작성한 코드는 여기에서 실행됩니다)
종료 요청
이때, 각 확장의 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는 이 요청에 대한 스크립트를 실행하는 데 필요한 환경 변수를 초기화합니다. 예를 들어 다음과 같습니다. 세션 모듈의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!