이 기사에서는 PHP 콘텐츠의 작동을 포함하여 PHP의 기본 작동 메커니즘을 자세히 설명하고, 시작부터 중지까지 PHP의 전체 라이프사이클을 예제를 통해 설명합니다.
소개
우리는 PHP 관련 프로세스를 수동으로 시작한 적이 없으며 Apache 시작과 함께 실행됩니다.PHP
는 mod_php5.so 모듈(특히 서버 애플리케이션 프로그래밍 인터페이스인 SAPI)을 통해 Apache에 연결됩니다.
커널, Zend 엔진 및 확장 계층; PHP 커널은 요청, 파일 스트림, 오류 처리 및 기타 관련 작업을 처리하는 데 사용됩니다. Zend 엔진(ZE)은 소스 파일을 기계 언어로 변환한 다음 가상 머신에서 실행하는 데 사용됩니다. 확장 계층은 PHP가 특정 작업을 수행하는 데 사용하는 함수, 라이브러리 및 스트림의 집합입니다. 예를 들어, MySQL 데이터베이스에 연결하려면 mysql 확장이 필요합니다. ZE가 프로그램을 실행할 때 여러 확장에 연결해야 할 수도 있습니다. 이때 ZE는 제어권을 확장에 넘겨주고 특정 작업을 처리한 후 이를 반환합니다. ;
마지막으로 ZE는 프로그램 실행 결과를 PHP 커널로 반환하고, 그 결과를 SAPI 계층으로 전송하고 최종적으로 브라우저에 출력합니다.
현실의 내부 작용을
탐구하는 것은
그리 간단하지 않습니다.위의 프로세스는 단순화된 버전일 뿐입니다. 좀 더 자세히 알아보고 그 뒤에서 어떤 일이 벌어지고 있는지 살펴보겠습니다.
◆Apache가 시작되면 PHP 인터프리터도 시작됩니다.
◆PHP의 시작 프로세스는 두 단계로 구성됩니다.
첫 번째 단계는 SAPI 수명주기 전반에 걸쳐 적용되는 일부 환경 변수를 초기화하는 것입니다.
두 번째 단계는 현재 요청에만 적용되는 일부 변수 설정을 생성하는 것입니다.
PHP를 시작할 때 첫 번째 단계가 무엇인지
잘 모르시나요? 첫 번째 단계와 두 번째 단계는 무엇인가요? 걱정하지 마십시오. 이에 대해서는 다음에 자세히 논의하겠습니다. 첫 번째이자 가장 중요한 단계를 먼저 살펴보겠습니다. 기억해야 할 점은 요청이 도착하기 전에 작업의 첫 번째 단계가 발생한다는 것입니다.
Apache를 시작한 후 PHP 인터프리터도 시작됩니다.
PHP는 각 확장의 MINIT 메서드를 호출하여 이러한 확장을 사용 가능한 상태로 전환합니다. php.ini 파일에서 어떤 확장이 열려 있는지 살펴보세요. MINIT는 "모듈 초기화"를 의미합니다. 각 모듈은 다른 요청을 처리하기 위해 일련의 함수, 클래스 라이브러리 등을 정의합니다.
일반적인 MINIT 메소드는 다음과 같습니다:
PHP_MINIT_FUNCTION(extension_name){
/* 함수, 클래스 등 초기화 */
}
PHP는 두 번째 단계를 시작합니다.
페이지 요청이 발생하면 SAPI 계층은 제어권을 PHP 계층으로 넘깁니다. 따라서 PHP는 이 요청에 응답하는 데 필요한 환경 변수를 설정합니다. 동시에 실행 중에 생성된 변수 이름과 값을 저장하기 위한 변수 테이블도 생성합니다.
PHP는 각 모듈의 RINIT 메소드, 즉 "초기화 요청"을 호출합니다. 전형적인 예는 세션 모듈의 RINIT입니다. 세션 모듈이 php.ini에서 활성화되면 $_SESSION 변수가 초기화되고 모듈의 RINIT
메서드가
호출될 때 관련 내용을 읽을 수 있습니다.프로그램 실행 사이에 준비 프로세스가 자동으로 시작됩니다.
일반적인 RINIT 메소드는 다음과 같습니다:
PHP_RINIT_FUNCTION(extension_name) {
/* 세션 변수 초기화, 변수 미리 채우기, 전역 변수 재정의 등 */
}
PHP 종료의 첫 번째 단계는
PHP 시작과 동일합니다. PHP 종료도 두 단계로 나뉩니다.
페이지가 실행되면(파일 끝에 도달하거나 종료 또는 다이 기능으로 종료됨) PHP가 시작됩니다. 청소 과정. 각 모듈의 RSHUTDOWN 메서드를 순서대로 호출합니다.
RSHUTDOWN은 프로그램 실행 시 생성된 기호 테이블을 지우는 데, 즉 각 변수에 대해 설정되지 않은 함수를 호출하는 데 사용됩니다.
일반적인 RSHUTDOWN 방법은 다음과 같습니다:
PHP_RSHUTDOWN_FUNCTION(extension_name) {
/* 메모리 관리 수행, 마지막 PHP 호출에 사용된 모든 변수 설정 해제 등 */
}
PHP 종료의 두 번째 단계
모든 요청이 처리되고 SAPI를 종료할 준비가 됩니다. PHP는 두 번째 단계를 실행하기 시작합니다.
PHP는 각 확장의 MSHUTDOWN 메서드를 호출합니다. 메모리를 해제합니다.
일반적인 RSHUTDOWN 방법은 다음과 같습니다:
PHP_MSHUTDOWN_FUNCTION(extension_name) {
/* 프리 핸들러와 영구 메모리 등 */
}
이런 식으로 전체 PHP 수명주기가 끝났습니다. "첫 번째 단계 시작"과 "두 번째 단계 닫기"는 서버의 요청이 없을 때만 실행된다는 점에 유의해야 합니다.