>  기사  >  백엔드 개발  >  PHP7의 실행 과정을 이해하고 있나요?

PHP7의 실행 과정을 이해하고 있나요?

藏色散人
藏色散人앞으로
2021-09-12 16:24:081839검색

PHP는 해석된 언어입니다. 실행 과정은 먼저 중간 코드로 컴파일된 다음 특정 가상 머신을 통해 특정 명령으로 변환되어 실행되어야 합니다. 실행 과정은 다음과 같습니다.
PHP 代码 => Token => 抽象语法树 => Opcodes => 执行

각 단계의 내용은 다음과 같습니다.
소스 코드는 어휘 분석을 통해 토큰을 얻습니다. 토큰은 PHP 코드를 잘라내는 의미 있는 식별자입니다. PHP7에는 총 137개의 토큰이 있으며 이는 zend_언어_parser.h 파일에 정의되어 있습니다.

구문 분석기를 기반으로 토큰을 추상 구문 트리(AST)로 변환

토큰은 단어 블록이지만 단일 단어 블록은 완전한 의미를 표현할 수 없으며 구성하고 연결하려면 특정 규칙이 필요합니다. 따라서 파서는 문법에 따라 토큰을 일치시키고 토큰을 연결해야 합니다. 구문 분석기가 토큰을 연결한 후의 제품은 AST(추상 구문 트리)입니다.

AST는 PHP7 버전의 새로운 기능입니다. 이전 버전의 PHP 코드는 실행 과정에서 AST를 생성하지 않았습니다. 주요 기능은 PHP 컴파일러와 인터프리터를 분리하고 유지 관리성을 향상시키는 것입니다.

구문 트리를 Opcode로 변환

구문 트리를 Opcode로 변환해야 엔진에서 직접 실행할 수 있습니다.

Execute Opcodes

opcodes는 PHP 실행 중 중간 코드인 opcode 모음입니다. 가장 일반적인 PHP 엔지니어링 최적화 조치 중 하나는 opcode 캐싱 기술을 나타내는 "opcache 켜기"입니다. 소스 코드에서 opcode까지의 단계를 제거함으로써 엔진은 캐시된 opacode를 직접 실행하여 성능을 향상시킵니다.

PHP7 커널 아키텍처


PHP7의 실행 과정을 이해하고 있나요?

zend 엔진

어휘/문법 분석, AST 컴파일 및 opcode 실행이 모두 Zend 엔진에서 구현됩니다. 또한 PHP의 변수 설계, 메모리 관리, 프로세스 관리 등도 엔진 레이어에서 구현됩니다.

PHP Layer

zend 엔진은 PHP에 대한 기본 기능을 제공하는 반면, 외부와의 상호 작용은 PHP 레이어를 통해 처리해야 합니다.

SAPI

서버 API의 약어로 장면의 cli SAPI 및 fpm SAPI가 포함되어 있습니다. 외부 모듈은 정의된 SAPI 프로토콜을 준수하는 한 PHP와 상호 작용할 수 있습니다.

확장 부분

은 zend 엔진이 제공하는 핵심 기능과 인터페이스 사양을 기반으로 개발 및 확장이 가능합니다.

PHP 7 소스 코드 구조

PHP 7의 주요 소스 코드 디렉토리는 sapi, Zend, main, ext 및 TSRM입니다.
sapi 디렉토리
sapi 디렉토리는 입력 및 출력 레이어를 추상화한 것으로, PHP가 외부 서비스를 제공하기 위한 사양입니다.
일반적으로 사용되는 여러 SAPI:
1) apache2handler: Apache 확장, 동적 링크 라이브러리를 생성하기 위해 컴파일되고 Apache에서 구성됩니다. Apache에 대한 http 요청이 있는 경우 구성에 따라 이 동적 링크 라이브러리가 호출되어 PHP 코드를 실행하고 PHP와의 상호 작용을 완료합니다.
2) cgi-fcgi: 컴파일 후 CGI 프로토콜을 지원하는 실행 프로그램이 생성됩니다. 웹 서버(NGINX 등)는 CGI 프로토콜을 통해 요청을 CGI 프로세스에 전달합니다. 요청하고 실행 결과를 웹 서버에 반환합니다.
3) fpm-fcgi: fpm은 FastCGI 프로세스 관리자입니다. NGINX 서버를 예로 들면, 요청이 NGINX 서버로 전송되면 NGINX는 FastCGI 프로토콜에 따라 해당 요청을 php-fpm 프로세스에 전달합니다.
4) cli: PHP의 명령줄 대화형 인터페이스
Zend 디렉터리
Zend 디렉터리는 PHP의 핵심 코드입니다. PHP의 메모리 관리, 가비지 수집, 프로세스 관리, 변수, 배열 구현 등이 모두 이 디렉토리의 소스 코드에 있습니다.

메인 디렉토리

메인 디렉토리는 SAPI 레이어와 Zend 레이어 사이의 접착제입니다. Zend 레이어는 PHP 스크립트의 컴파일과 실행을 구현하고, sapi 레이어는 입력과 출력의 추상화를 구현하며, 메인 디렉터리는 이들 사이를 연결하는 역할을 합니다. 또한 SAPI 요청을 구문 분석하고 실행할 스크립트 파일과 매개변수를 분석하는 한편, zend 엔진을 호출하기 전에 필요한 모듈 초기화 및 기타 작업을 완료합니다.

ext 디렉터리

ext는 PHP 확장과 관련된 디렉터리이며 일반적으로 사용되는 배열, str, pdo 및 기타 일련의 함수가 여기에 정의되어 있습니다.

TSRM

TSRM(Thread Safe Resource Manager) - 스레드 안전 리소스 관리자는 리소스 공유의 보안을 보장하는 데 사용됩니다.

위 내용은 PHP7의 실행 과정을 이해하고 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제