>백엔드 개발 >PHP 튜토리얼 >인터프리터 실행 프로세스의 PHP 커널 탐색

인터프리터 실행 프로세스의 PHP 커널 탐색

WBOY
WBOY원래의
2016-07-29 09:09:361106검색

cli(명령줄 인터페이스)는 PHP의 명령줄 모드입니다. 이제 이 SAPI는 기본적으로 서버에 설치되고 나면 일반적으로 이 파일이 /usr/local이라고 가정합니다. / bin/php, 다음 명령을 사용하여 SHELL에서 PHP 스크립트를 실행할 수 있습니다.

코드 복사 코드는 다음과 같습니다.


/usr/local/bin/php -f test.php

CLI SAPI를 예로 들어 PHP의 핵심 부분을 분석합니다. 실행. CLI는 PHP 명령줄 모드입니다. 이 SAPI는 기본적으로 설치됩니다. PHP가 서버 측에 설치된 후 실행 파일이 생성되며, 이는 셸에서 PHP 명령을 호출하여 실행할 수 있습니다.

코드 복사 코드는 다음과 같습니다.


PHP -f XX.php

실행 프로세스:

명령줄 매개변수 분석

환경 초기화,

PHP 코드 컴파일 및 실행;

환경 정리, 종료

세 번째 단계에서 PHP 스크립트 실행 방법:

php_execute_script(handle_file)을 호출하여 세 번째 단계를 완료합니다. 이 함수는 최종적으로 zend_execute_scipts(...)가 호출됩니다. 이 함수는 한 번에 여러 PHP 스크립트를 실행할 수 있는 가변 매개변수 함수입니다.


zend_execut_scripts(…..) 함수에서 코어는 (zend_compile_file)( compile_file ), (*zend_execute)( zend_op_array ) 두 함수를 호출합니다.

zend_compile_file을 호출하여 컴파일합니다. 매개변수로 지정된 PHP 스크립트 파일인 이 함수는 zend_op_array 구조 포인터를 반환합니다.


zend_execute에 전달된 매개변수는 zend_compile_file의 반환 값이며 opcode가 실행되기 시작합니다.

이 두 함수는 Zend API인데, 엔진 초기화 시 특정 메소드를 반환하는 함수 포인터입니다.

ps.: 그러면 이 두 Zend API 함수 포인터는 왜 있는 걸까요?

엔진이 초기화되면 zend_execute 및 zend_compile_file은 엔진이 초기화될 때 기본 방법을 가리킵니다. 컴파일 및 실행 중에 함수 포인터를 재정의하여 엔진을 확장할 수 있는 후크를 남겨둘 수 있습니다. 예를 들어, vld는 원래 함수를 캡슐화하는 자체 함수에 zend_execute 및 zend_compile_file을 지정하고 opcode 정보의 출력을 추가합니다.

위 내용은 관련 측면을 포함하여 PHP 커널 탐색을 위한 인터프리터의 실행 프로세스를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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