이 글은 주로 PHP 커널 탐색을 위한 인터프리터의 실행 과정에 대한 관련 정보를 소개합니다. 그것이 모두에게 도움이 되기를 바랍니다.
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_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가 구현하는 방법에 대한 자세한 설명 일관된 해싱 알고리즘
위 내용은 PHP 커널 인터프리터 실행에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!