> 백엔드 개발 > PHP 튜토리얼 > PHP 라이프사이클에 대한 자세한 설명(그림)

PHP 라이프사이클에 대한 자세한 설명(그림)

不言
풀어 주다: 2023-04-04 10:38:02
앞으로
4079명이 탐색했습니다.

이 기사는 PHP 수명주기에 대한 자세한 설명(그림)을 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

  • 첫 번째 프로세스는 모듈 초기화 단계(MINIT)입니다. 이 프로세스는 전체 SAPI 수명 주기(예: Apache 시작 후 전체 수명 주기 또는 명령줄 프로그램의 전체 실행 프로세스) 동안 한 번만 수행됩니다. ). 두 번째 프로세스는 요청 단계에서 발생하는 모듈 활성화 단계(RINIT)입니다. 예를 들어 URL을 통해 페이지를 요청하면 각 요청(RINIT 요청 시작) 전에 모듈 활성화가 수행됩니다. 요청이 도착하면 PHP PHP 실행 중 변수 이름과 값 내용을 저장하는 심볼 테이블과 현재 모든 함수, 클래스 및 기타 정보가 포함된 심볼 테이블을 포함한 실행 환경 생성 등 스크립트 실행을 위한 기본 환경을 초기화합니다. . 그런 다음 PHP는 모든 모듈의 RINIT 함수를 호출합니다. 이 단계에서 각 모듈은 일부 관련 작업도 수행할 수 있습니다. 일반적으로 PHP는 스크립트가 끝까지 실행되거나 종료() 또는 die( ) 기능. 시작 단계에 해당하여 종료 단계도 두 단계로 나누어집니다. 하나는 요청이 완료된 후 모듈을 비활성화하는 단계(RSHUTDOWN, RINIT에 해당)이고, 다른 하나는 SAPI 수명 주기가 종료되면 모듈을 닫는 단계입니다( 웹 서버가 종료되거나 명령줄 스크립트가 실행되고 종료됩니다. (MSHUTDOWN, MINIT에 해당)

  • 단일 프로세스 SAPI 수명 주기
  • 시작 - 시작 요청 - 종료 요청 - 종료

  • Startup
    PHP 라이프사이클에 대한 자세한 설명(그림)
    각 모듈의 모듈 초기화 호출 그 전에 다음을 포함하는 초기화 프로세스가 있습니다.

Zend 엔진 및 핵심 구성 요소 초기화

여기서의 초기화 작업에는 메모리 관리 초기화, 전역적으로 사용되는 함수 포인터 초기화(예: 앞에서 언급한 zend_printf 등), 어휘 분석, PHP 소스 파일의 구문 분석, 중간 코드 실행을 위한 함수 포인터 할당, 여러 HashTable 초기화(예: 함수 테이블, 상수 테이블 등), ini 파일 구문 분석 준비, PHP 소스 파일 구문 분석 준비, 내장 함수 등록(예: strlen, 정의 등), 표준 상수(예: E_ALL, TRUE, NULL 등) 등록, GLOBALS 전역 변수 등록 등

  • Parse php.ini

  • 전역 연산 함수 초기화

  • 정적으로 구축된 모듈 및 공유 모듈(MINIT) 초기화

이 모듈을 등록된 모듈 목록(module_registry)에 등록합니다. 모듈은 이미 등록되었으며, PHP는 모듈 XXX가 이미 로드되었다는 오류를 보고합니다. 1. 각 모듈에 포함된 함수를 함수 테이블(CG(function_table))에 등록합니다. 함수를 추가할 수 없는 경우 Unable to Register Functions, Unable to Load라고 보고됩니다.

내장 모듈과 애드온 모듈 이후 다음 단계는 공유 객체(예: DLL)와 php.ini 파일을 통해 유연하게 구성되는 확장 기능을 등록하는 것입니다.
  • 모든 모듈이 등록되면 PHP는 즉시 모듈 초기화 작업(zend_startup_modules)을 실행합니다. 전체 프로세스는 각 모듈을 차례로 탐색하고 각 모듈의 모듈 초기화 함수를 호출하는 것입니다. 이는 이 섹션 앞부분에서 언급한 매크로 PHP_MINIT_FUNCTION에 포함되어 있습니다.

  • 파일 관련 내용을 처리한 후 PHP는 php_request_startup을 호출하여 요청 초기화 작업을 수행합니다. 요청 초기화 작업은 그림에 표시된 각 모듈의 요청 초기화 함수를 호출하는 것 외에도 많은 작업을 수행합니다. 주요 내용은 다음과 같습니다.
  • 위의 일부 변수 외에도 PHP의 실행 환경에도 오류 처리, 예외 처리 등이 있으며 모두 여기에서 초기화됩니다. php.ini를 통해 구성된 zend_extensions도 탐색되며 여기에서 활성화 함수가 호출됩니다.

SAPI 활성화

환경 초기화

여기서의 환경 초기화는 사용자 공간에서 사용해야 하는 일부 환경 변수의 초기화를 의미합니다. 여기서의 환경에는 서버 환경, 요청 데이터 환경 등이 포함됩니다. 우리가 사용하는 실제 변수는 # 🎜🎜#입니다. P# 🎜# # 🎜🎜##🎜 🎜# 🎜🎜 #OST, #🎜 🎜## 🎜🎜#_GET、# 🎜 🎜## 🎜🎜#C#🎜 🎜# 🎜🎜 ## 🎜# # 🎜🎜#OOKIE , #🎜 🎜#_SERVER, #🎜 🎜 ## 🎜 🎜## 🎜 🎜# E# 🎜🎜 ## 🎜 🎜#NV#🎜 🎜## 🎜🎜#_FILES. 모듈 요청 초기화실행 #🎜 🎜#DEACTIVATIONPHP가 요청을 닫는 프로세스는 php_request_shutdown 함수에 존재하는 여러 닫는 작업의 모음입니다. 이 컬렉션에는 다음이 포함됩니다:

register_shutdown_function()을 통해 등록된 모든 함수를 호출합니다. 종료 시 호출되는 이러한 기능은 사용자 공간에 추가되었습니다. 간단한 예로, 스크립트 오류가 발생할 때 통합 함수를 호출하여 사용자에게 보다 친숙한 페이지를 제공할 수 있습니다. 이는 웹의 404 페이지와 다소 유사합니다.
사용 가능한 모든 __destruct 함수를 실행합니다. 여기서 소멸자는 객체 풀(EG(objects_store))에 있는 모든 객체의 소멸자와 EG(symbol_table)에 있는 각 요소의 소멸자 메서드를 포함합니다.
모든 출력을 플러시합니다. 이 역시 HTTP 응답 헤더를 보내는 과정입니다. 문자열을 출력하지만 이 문자열은 특정 사양을 준수할 수 있습니다.
각 모듈의 종료 요청 메서드를 탐색하고 모듈의 요청 종료 작업을 수행합니다. 이는 각 확장의 RSHUTDOWN 변수를 호출하는 것입니다.
zend_deactivate 함수를 통해 어휘 분석기, 구문 분석기 및 중간 코드 실행기를 끕니다.
각 확장의 사후 RSHUTDOWN 함수를 호출합니다.
SAPI를 닫습니다.
스트림 래퍼를 닫고 스트림 필터를 닫습니다.
최대 실행 시간을 재설정합니다.


End

마침내 마무리할 시간입니다. sapi_flush는 CLI 모드의 fflush 기능과 동일한 sapi_module.flush를 호출합니다. Zend 엔진을 종료합니다.

zend_shutdown은 Zend 엔진을 종료합니다

.

위 내용은 PHP 라이프사이클에 대한 자세한 설명(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿