[Подробно о PHP] Базовый операционный механизм PHP7

PHP

Процесс выполнения кода PHP7

PHP — это интерпретируемый язык, и процесс его выполнения необходимо скомпилировать в промежуточный код, а затем преобразовать в конкретные инструкции для выполнения через конкретную виртуальную машину. Процесс его выполнения следующий:

PHP 代码 => Token => 抽象语法树 => Opcodes => 执行

Содержание каждого шага следующее:

  • Исходный код получает Token через лексический анализ

Токен — это значимый идентификатор, на который нарезается PHP-код. В PHP7 всего 137 токенов, которые определены в файле zend_language_parser.h.

  • Преобразование токена в абстрактное синтаксическое дерево (AST) на основе синтаксического анализатора

Токены — это фрагменты слов, но отдельные фрагменты слов не могут выражать полную семантику, и их необходимо организовывать и объединять с помощью определенных правил. Следовательно, синтаксический анализатор должен сопоставить маркер в соответствии с грамматикой и объединить маркер. Продуктом после того, как анализатор объединяет токен, является абстрактное синтаксическое дерево (AST). AST — это новая функция версии PHP 7. Во время выполнения предыдущей версии PHP-кода шаг генерации AST отсутствует. Его функция в основном состоит в том, чтобы реализовать разделение компилятора PHP и интерпретатора и улучшить удобство сопровождения.

  • Преобразование синтаксического дерева в код операции

Синтаксическое дерево необходимо преобразовать в код операции, прежде чем оно сможет быть непосредственно выполнено движком.

  • Выполнить коды операций

Коды операций — это набор кодов операций, которые являются промежуточными кодами в процессе выполнения PHP. Существует относительно распространенный «открытый кэш операций» в мерах инженерной оптимизации PHP, который относится к технологии кэширования кодов операций. Опуская этап от исходного кода до кода операции, движок напрямую выполняет кэшированный непрозрачный код для повышения производительности.

Архитектура ядра PHP7

Индия представила мне эту картину

  • зенд двигатель

Лексический/синтаксический анализ, компиляция AST и выполнение кодов операций реализованы в движке Zend. Кроме того, переменный дизайн PHP, управление памятью, управление процессами и т. д. также реализованы на уровне движка.

  • PHP-слой

Механизм zend предоставляет базовые возможности для PHP, а взаимодействие извне должно обрабатываться на уровне PHP.

  • SAPI

Аббревиатура для серверного API, которая включает в себя cli SAPI и fpm SAPI для сцены. Внешние модули могут взаимодействовать с PHP, если они соответствуют определенному протоколу SAPI.

  • Расширенный раздел

В соответствии с основными возможностями и спецификациями интерфейса, предоставляемыми движком zend, можно выполнять разработку и расширение.

PHP 7 Структура исходного кода

Основными исходными каталогами php 7 являются: sapi, Zend, main, ext и TSRM.

  • каталог сапи

Каталог sapi представляет собой абстракцию уровней ввода и вывода и является спецификацией PHP для предоставления внешних служб.

Несколько часто используемых SAPI:

1) apache2handler: расширение Apache, создает библиотеку динамической компоновки после компиляции и настраивает ее под Apache. Когда есть HTTP-запрос к Apache, эта библиотека динамической компоновки будет вызываться в соответствии с конфигурацией для выполнения кода PHP и завершения взаимодействия с PHP.

2) cgi-fcgi: после компиляции генерируется исполняемая программа, поддерживающая протокол CGI.Веб-сервер (например, NGINX) передает запрос процессу CGI по протоколу CGI, и процесс CGI выполняет соответствующий код в соответствии с request и возвращает результат выполнения на веб-сервер.

3) fpm-fcgi: fpm — менеджер процессов FastCGI. На примере сервера NGINX, когда запрос отправляется на сервер NGINX, NGINX передает запрос процессу php-fpm для обработки в соответствии с протоколом FastCGI.

4) cli: интерактивный интерфейс командной строки PHP.

  • Зенд-каталог

Каталог Zend — это основной код PHP. Управление памятью в PHP, сборка мусора, управление процессами, переменные, реализация массива и т. д. — все это находится в исходном коде этого каталога.

  • главный каталог

Главный каталог является связующим звеном между уровнем SAPI и уровнем Zend. Уровень Zend реализует компиляцию и выполнение PHP-скриптов, слой sapi реализует абстракцию ввода и вывода, а связующим звеном между ними служит главная директория. Продолжая вышесказанное, разберите SAPI-запрос, проанализируйте файл скрипта и параметры, которые необходимо выполнить, запустите, выполните необходимую инициализацию модуля и другую работу перед вызовом движка zend.

  • добавочный каталог

ext — это каталог, связанный с расширениями PHP, и здесь определяются часто используемые функции array, str, pdo и другие.

  • TSRM

TSRM (Thread Safe Resource Manager) — диспетчер потоковобезопасных ресурсов, используется для обеспечения безопасности совместного использования ресурсов.