Как скомпилировать php файл

Обновлено: 06.07.2024

Я знаю, что PHP компилируется в байтовый код до его запуска на сервере, а затем этот байтовый код может быть кэширован, так что весь скрипт не должен быть повторно интерпретирован с каждым веб-доступом.

но можете ли вы "скомпилировать" php и загрузить двоичный файл, который будет просто запускаться интерпретатором байтового кода?

после того, как этот вопрос был задан, Facebook запустил хип-хоп для PHP который, вероятно, является самым проверенным PHP-компилятором на сегодняшний день (учитывая, что он запускал один из 10 крупнейших веб-сайтов в мире). Однако Facebook прекратил его в пользу HHVM, который является виртуальной машиной, а не компилятором.

помимо этого, googling PHP compiler появляется ряд сторонних решений.

  • компилируется в собственные двоичные файлы
  • не очень активно сейчас (февраль 2014) – последняя версия в 2011, последнее изменение летом 2013
  • GitHub, GitHub переписать
  • free, с открытым исходным кодом реализация PHP с компилятором
  • компилируется в собственные двоичные файлы (Windows, Linux)
  • прекращено с 2010 года до тех пор, пока участники не нашли – сайт вниз, остается на GitHub, где последнее изменение с начала 2012
  • расширение PECL PHP
  • экспериментальные
  • компилируется в байт-код PHP, но может обернуть его в двоичный файл Windows, который загружает интерпретатор PHP (см. bcompiler_write_exe_footer() руководство)
  • looks discontinued now (февраль 2014) – последнее изменение в 2011
  • Википедия, IBM
  • инкубатор для изменения WebSphere sMash
  • поддерживается IBM
  • компилируется в байт-код Java
  • looks discontinued now (февраль 2014) - веб-сайт вниз, выглядит как большой шумиха в 2008 и 2009 годах
  • компилирует автономные двоичные файлы Windows
  • двоичные файлы содержат байт-код и пусковую установку
  • looks discontinued now (февраль 2014) – последнее изменение в 2006
  • компилируется в C++
  • looks discontinued now (февраль 2014) – последнее изменение в 2003

короткий ответ: "нет".

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

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

с тех пор, как вопрос был впервые задан, в этом ответе произошло изменение от категорического "нет" до "вида"

хип-хоп для PHP был компилятором, который взял PHP-код и превратил его в высоко оптимизированный C++ По-видимому, некоторые функции не поддерживаются (например 'взорваться')

Я нашел этот вопрос, ища дополнительную информацию о том, как реализовать HipHop, и подумал, что я скажу :)

  • кодировать весь скрипт в фирменной приложения PHP
  • для кодирования некоторых классов и / или функций в проприетарном приложении PHP
  • чтобы включить производство приложений php-gtk, которые могут быть использованы на клиентских рабочих столах, без необходимости php.исполняемый.
  • сделать технико-экономическое обоснование для конвертера PHP в C

расширение доступно в PECL.

phc позволяет компилировать PHP-программы в общие библиотеки, которые могут быть загружены на сервер. Программа PHP компилируется в бинарники. Это сделано таким образом, чтобы поддержать eval s, include s и вся стандартная библиотека PHP.

Если вы просто ищете для создания двоичного исполняемого файла из php-скрипта, то, пожалуйста, не пытайтесь сделать ваш вопрос чрезвычайно точным, потому что это заставит его показаться, что вы точно знаете, что вам нужно. Кроме того, большинство разработчиков PHP имеют абсолютно нулевое представление о том, что такое байт-код.

с этим сказано, ответы Да. Я только что закончил компиляцию PHP-скрипта в двоичный файл. И не просто двоичный. Я использовал CDE применение (ссылка на машину Wayback,ссылка на источник теперь сломан), чтобы превратить его в портативный двоичный файл, который может быть распространен со всеми зависимостями и выполнен без каких-либо проблем. и он работает красиво.

все, что вам нужно использовать phc.

Эм, кто-нибудь слышал о Zend Guard, который делает именно то, что спрашивает этот человек. Он кодирует / запутывает PHP-код в "машинный код".

существует несколько "компиляторов" PHP-кода. Большинство из них не поддерживают все функции PHP, так как они просто должны быть интерпретированы во время выполнения.

см. 5.5.x со встроенным модулем OPcache, изменчивым в общей памяти, гораздо большая производительность и принцип динамизма php остаются нетронутыми.

в php 7 есть опция php ini opcache.file_cache это сохраняет байт-код в определенной папке. В может быть полезно в php cli-скрипте, которые "скомпилированы" и сохранены в определенной папке для оптимизированного повторного использования.

Opcache это не компиляция, но что-то подобное.

PHP на самом деле не компилируется, как со многими программами. Вы можете использовать кодировщик Zend, чтобы сделать его нечитаемым.

PHP - интерпретируемый язык программирования, при каждом запросе происходит анализ и "выполнение" исходного кода. Такой подход, конечно, очень удобен на стадии разработки проекта, но вносит лишний шаг в процесс выполнения продакшен кода. Таким образом интерпретация, на первый взгляд сильная сторона PHP, стоит лишнего процесорного времени и ресурсов.

Ниже речь пойдет о компиляторах, позволяющих компилировать php код в C++, а его в исполняемый. Таким образом PHP приложения выполняются непосредсвенно процессором, минуя интерпретатор.

Проверим все ли так хорошо на практике.

Как работает интерпретатор

  1. Парсинг кода и генерация опкодов (Zend opcodes) - инструкций, понятных интерпретатору.
  2. Выполнение опкодов.

Тогда как первая фаза хорошо поддается оптимизации (использование кеша опкодов), вторая довольно закрытая - интерпретатор всегда является посредником между набором команд и процессором, выполняющим их. Без интерпретатора, процессору не понять, чего делать с опкодами.

Чтобы избавиться от звена-интерпретатора придумали компиляторы, наиболее популярный и свежий из них HipHop от Facebook. Пощупаем его поближе.

HipHop PHP

  1. оптимизирует PHP код
  2. конвертирует в С++
  3. генерирует из вашего приложения многопоточный веб-сервер исполняющий его
  4. компилирует в исполняемый код при помощи g++

Таким образом на входе PHP код, на выходе сервер, частью которого является написаный функционал.

Проверим, как справится HipHop с компилированием приложения написаного с использованием фреймворка, например Wordpress.

Компилируем Wordpress

После установки HipHop в папке src/hphp/ получим файл hphp, который и является компилятором. Перед началом компиляции, устанавливаем переменные среды:

Скачиваем Wordpress и разархивируем архив:

Копируем wp-config-sample.php в wp-config.php и указываем настройки соединения с базой (в настройках хоста указываем 127.0.0.1, а не localhost).

  1. Открываем wp-includes/js/tinymce/plugins/spellchecker/classes/SpellChecker.php и заменяем: на
  2. В wp-includes/query.php, вместо вставляем

Hiphop'у нужно указать список файлов, которые будем компилировать - получим его и сохраним в files.list:

Все готово к компиляции, приступим:

После завершения выполнения команды, во временной папке (в начале компиляции hphp покажет ее путь, что то типа "/tmp/hphp_ptRgV1") получим скомпилированный веб-сервер. Запустим его (если на 80 порту, что-то висит, например apache или nginx - нужно сначала остановить, чтобы освободить порт):

Производительность

Посмотрим, будет ли прирост производительности, по сравнению с нескомпилированой версией Вордпреса, бегающей на apache2. Ниже графики зависимости скорости генерации страниц от количества параллельных пользователей.

Как видите результаты получились шокирующие: скомпилированый блог работает в среднем в 6 раз быстрее! Среднее количество обработанных запросов за секунду в нескомпилированом 9, а в скомпилированом 50! Не знаю как вас, а меня эти результаты поразили, такого сильного прироста производительности не ожидал.

Подведем итог

После таких ошеломляющих результатов можно сказать только одно - ребята из Facebook поработали на славу. Компилятор действительно делает из приложения ракету и хотя перед компилированием приложение нужно подготавливать - результат того стоит.

В тему:

Если пост понравился - нажмите на гугловский +1 - мне будет больше мотивации писать ещё и просто приятно.

Компиляция PHP из исходных кодов чаще делается на Unix-подобных систем. Те, кто работает в среде ОС Windows, скорее всего, загрузит и установит PHP из бинарных пакетов. И хотя я не согласен, что это проще в использовании, предварительно скомпилированных решение, даже на системах Unix есть некоторые преимущества, которые могут прийти с составлением двоичной от источника. В общем:

  • У вас есть возможность тонкой настройки конечного продукта при компиляции. Может быть, вы хотите определенное расширение которое компилируется непосредственно в двоичном, а не загружать его в качестве внешней библиотеки. Или, возможно, вы хотите, выключить то что особенностью которого, как правило, доступно по умолчанию.
  • Вы можете сделать хитрость, в процессе компиляции, если нужно, которые могут повысить производительность для конкретной среды (конечно, это предполагает, что вы уже знаете, что вы делаете в этом случае вы бы не читали эту статью !).
  • Компиляция может быть единственным способом заставить вещи работать, если скомпилированные двоичные файлы были построены на более старых версиях с поддержкой программного обеспечения и библиотек, а сейчас Вы работаете на новой системе.

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

Настройка среды сборки

PHP написан на C и поэтому компилятор C необходим, если вы собираетесь построить PHP из исходных кодов. C + + это супер набор C, так что хороший C + + компилятор должен иметь возможность компилировать код C, и хотя это не всегда так. Для Windows, Visual Microsoft, C + + Express ( который после будет называться VC + + ) в свободном доступе на веб-сайте компании Microsoft . Использовалось издание 2010 года.

При выборе версии компилятора, вы должны иметь в виду, как вы будете работать под управлением PHP. Если вам придется работать с mod_php официально скомпилированных двоичных Apache, и вы хотите, скомпилировать PHP с помощью Visual Studio 6, так как это версия для компиляции Apache. Модуль должен нацелиться на ту же библиотеку времени выполнения, как Apache, в этом случае msvcrt.dll . Если вы строите Apache из исходных кодов, а также, или если вы собираетесь запускать PHP как FastCGI или CLI, то это не проблема, и 2010 год будет работать нормально.

Вы также должны установить программное обеспечение Windows Development Kit (SDK после). SDK дает нам важные файлы заголовков для платформы Windows, которая нам понадобится для успешной компиляции. Это тоже можно бесплатно скачать , использовалась версия 7.1.

Установите компилятор, а затем SDK. Я не буду обсуждать установку, так как оба имеют графический мастер установки, проведет вас через весь процесс.

Это хорошая идея, чтобы создать рабочее пространство, к которому можно распаковать исходный код и компилировать что бы они не влияли на остальную часть Вашей системы. Создайте папку C: \ PHP-Dev , которая будут служить в качестве рабочего каталога, а затем распаковать в ней бинарный архив и инструменты.

Далее, распакуйте содержимое архива, источник PHP в C: \ PHP-Dev теперь у вас есть php5.4 в исходной папке, а затем извлечь его архив deps в одноуровневую папку deps. Структура каталога должна выглядеть примерно так:

Структура каталогов

Откройте Windows SDK Command Prompt, которая была установлен ​​с SDK (Start => Microsoft Windows SDK => Windows SDK Command Prompt) и выполнить следующие команды:

С помощью командной строки консоли SDK желательно перед обычным cmd.exe консоли, как она задает много переменных среды, специфичных для компиляции исходного кода. Компиляции команд позже также должны быть выполнены в этой консоли.

setenv установить некоторые свойства сборки для окружающей среды, в данном случае установлена среда целевой Windows XP 32-разрядной версии сборки. Вы можете попробовать и построить с / x64 , если вы ищете приключений. Определение различных версий Windows, таких как / Vista , скорее всего, проблемы выхода из-за какой-то странной определений в скриптах (PHP по-прежнему хочет быть XP-совместимым). Если вы действительно не знаете, что вы делаете, это, наверное, безопаснее всего придерживаться рекомендуемых значений, которые я использовал выше.

phpsdk_setvars.bat сценарий выходит на некоторые дополнительные переменные окружения, процесс сборки смог найти бинарные инструменты.

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

Убедившись, что у вас есть правильная среда построения, необходимые источники, и никаких зависимостей самая сложная часть процесса. Так что теперь ваша среда настроена из исходного кода и зависимостей в своем месте, пришло время компиляции!

Компиляция PHP

В командной строке SDK, перейдите в папку источник PHP и запустить buildconf. Команда отвечает за генерацию конфигурационных файлов, которые будут созданы Makefile для управления процессом компиляции.

После buildconf завершает (это займет всего секунду), выполните настройку configure --help - и изучить помощь, какие функции вы хотите включить / выключить, а затем снова запустите configure (настройки) с любой желаемой опцией. Это хорошая идея, чтобы проверить выходные перед переходом, поскольку он предупредит вас, если любой из необходимых зависимостей не доступны. Если это произойдет, вы можете либо установить зависимости и повторно запустить настройку еще раз или отрегулируйте вызова для отключения расширений, которые в них нуждаются.

Наконец, запустите NMAKE , чтобы начать компиляции.

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

Когда первый NMAKE процесса компиляции завершен вы найдете свой ​​новенькие PHP файлы в папке Release_TS. NMAKE тест запускает новые двойные через ёмкость ошибка тестов, чтобы убедиться, что все работает как и должно быть. Результаты тестов NMAKE направляются в QA команда, которая зависит от них, чтобы улучшить PHP, так что это может занять несколько минут, для работы, это ответственное дело.

На этом этапе вы также можете воспользоваться дополнительным шагом ведения NMAKE оснастки, которая создаст ZIP архивы и двоичные файлы, которые можно скопировать вокруг.

Компиляция extensions

Есть два пути для компиляции PHP extensions (расширений): статически и динамически. Статически скомпилированные расширение компилируется в бинарный PHP, в то время как динамически скомпилированных один отдельный DLL, которые могут быть загружены позже через php.ini файл. Расширения, как правило, составлен по состоянию DLL, хотя есть некоторые преимущества для статической компиляции, а также, в конечном итоге это зависит от ваших потребностей.

Для компиляции PHP extensions (расширений) на Windows, экстракт расширение исходного кода папку, в ext папку вашу директорию-источник PHP. Затем, заново настроить скрипт, запустив buildconf--force и перекомпиляции PHP, используя соответствующие пункты, чтобы включить расширение.

Опцией --force, buildconf сила ей восстановить конфигурационный скрипт. Затем, запустите configure --help и вы должны увидеть вариант включить новое расширение на выходе. В этом случае, это --enable-AOP.

Когда nmake finishes заканчивается, вы должны будете недавно построенный PHP двоичный PHP с AOP.

Расширения будут доступны как DLL, а не испеченный в PHP, вы можете выполнить те же действия, что и выше, но определять "shared" (общие) в качестве значения для настройки, позволяет вариант.

В результате DLL будет в папке Release_TS вместе с двоичным PHP компиляция закончится, в данном случае имя php_aop.dll .

Компиляция в Windows, все еще ​​немного сложна, особенно когда дело доходит до расширения. Возможность компилировать исходный код хороший навык, особенно если впоследствии вы захотите изменить PHP.

Termin

Это не коммерческий проект! Основное содержание, конспект переводов с различных веб-сайтов о новых веб-технологиях. Статьи и обзоры нововведений веб-программирования. Транслейт осуществляется разными онлайн переводчиками.

Адаптивный Slideshow Widget

Адаптивный Slideshow Widget реагирует на разные размеры мониторов мобильных устройств.

С каждым годом всё больше развивается мобильный веб-контент. Адаптивный дизайн стал важной частью веб-строительства. И что делать, если для сайта нужен слайд-шоу который .
Читать далее →

Хеширование паролей в PHP

Основные принципы, лежащие в основе хеширования

В большинстве современных приложений PHP, доступ к важной информации пользователя хранится в базе данных. Например, веб-приложение может иметь систему регистрации для новых .
Читать далее →

Приложения для Google Analytics

Список приложений, которые должны помочь получить максимум от Google Analytics.

Многие уже знают что Google Analytics является платформой бесценной веб-аналитики. Если вы используете его для своего личного веб-сайта или ваших клиентов, вы .
Читать далее →

Фотогалерея с комментариями

Фотогалерея с комментариями как на Facebook

Задумывались ли Вы о собственном стиле фото gallry с комментариями например как на facebook? Основная идея - когда мы нажимаем на изображение - .
Читать далее →

Обзор Internet Explorer 10

Обзор Internet Explorer 10

Новая версия IE10 (Platform Preview 2) стала доступна для скачивания. IE10 также поддерживает более высокие стандарты безопасности. В браузере реализован запуск HTML5 .
Читать далее →

Mozilla Firefox

В версии Firefox 18, есть ряд изменений которые нужно знать.

Wyzo Media

Wyzo Media

Браузер Wyzo перестроен полностью от начала до конца. Теперь Wyzo выходит в Интернет быстрее, чем когда-либо. Это действительно так. Более безопасный. Ваша безопасность .
Читать далее →

Приложение для веб-разработки на Android

Android, 6 бесплатных приложений для веб-разработки

Устройство Android в некоторых случаях может избавить вас от необходимости таскать 17" ноутбук на презентацию для клиентов. Вот мои любимые приложения Android для .
Читать далее →

Водяной знак в WordPress

7 полезных плагинов Watermark для WordPress

Вы знаете что можно подставить водяной знак на фотографии с помощью плагинов WordPress, вы можете поставить защиту изображения автоматически, но она должна быть .
Читать далее →


Давайте посмотрим на разницу между компилируемым языком и интерпретируемым языком.

Парсинг
1: скомпилированный целевой язык представляет собой двоичный машинный код, который может выполняться на физическом компьютере.
2: интерпретируемые языки, такие как php, также должны быть скомпилированы. Это компиляция в реальном времени, реализуемая ядром php. Она включает лексический и грамматический анализ. Окончательно сгенерированные коды операций аналогичны машинному коду. Кодирование этого типа кодирования неизвестно физической машине и не может быть выполнено. Затем нам нужно добавить виртуальную машину на верхний уровень физической машины. Ядро php добавляет уровень программного обеспечения к физической машине, чтобы реализовать виртуальную машину, которая может распознавать коды операций. , Вызвал виртуальную машину zend.

лексический анализ

принцип: Для кода, который использует кодировку php, мы можем рассматривать его как очень длинную строку, тогда как мы можем определить, какая длинная строка является переменной, которая является оператором присваивания, которая является функцией, основная идея заключается вИспользуйте обычный, чтобы разделить всю строку, Чтобы найти соответствующий логотип, мы называем этот логотип токеном, процесс поиска всех токенов - это лексический анализ

Вопрос: Как определить, что строка верна для регулярного выражения (a | b) * abb? Как мы можем сделать это в коде? Ведущий NFA и DFA


NFA и DFA
NFA: Неопределенные конечные автоматы
Для регулярного выражения (a | b) * abb мы можем получить следующий неопределенный конечный автомат

Пример создания: abb / aabb / babb / aababb
не выполняется, например: a / ab / bb / acabb

DFA: Определение конечных автоматов


Для регулярного выражения (a | b) * abb можно получить следующий определенный конечный автомат

Пример создания: abb / aabb / babb / aababb
не выполняется, например: a / ab / bb / acabb

Разница между NFA и DFA
1: NFA приведет к остановке состояния в определенном состоянии, а DFA решает эту проблему.

Мы знаем, что для языка php, если вы хотите разделить все токены, должно быть много регулярных выражений, и они также более сложные, так что нам нужно писать DFA вручную? Ответ - нет. Существует относительно полный инструмент, который помогает нам решить эту проблему, и это re2c.

re2c
скачать и установить

Обратите внимание, что файлы **. L ** - это исходные файлы, обрабатываемые re2c.
Например, inteers.l: этот файл позволяет судить, какой тип возвращаемого значения является двоичным, восьмеричным, десятичным, шестнадцатеричным или ошибочным, в соответствии с входными параметрами. Код выглядит следующим образом

обработка команд re2c
1: re2c inteers.l -o integers.c // Используйте команду re2c для вывода целых чисел.l как целых. c
2: g ++ inteers.c -o integer // Создание исполняемого файла с помощью g ++
3:./integers 0b10
4: выводится двоичный файл

Давайте посмотрим на файл c, созданный re2c

Фактически, re2c преобразует написанное нами регулярное выражение в DFA, которое должно определять конечные автоматы. Нам может быть очень удобно провести некоторый лексический анализ. Нам нужно только написать регулярные выражения, и это поможет нам сгенерировать Соответствующий DFA значительно повышает нашу эффективность.

Парсинг

Для $ a = 1 мы можем проанализировать $ a, =, 1 с помощью лексического анализа, но после анализа мы не установили отношения между ними, поэтому процесс установления отношения является грамматическим анализом.

Введение в грамматический анализ
Пример: относительно a = b + c * 2 Мы разбиваем оператор присваивания на древовидную структуру, которая также является деревом с множеством ветвей. Мы называем это дерево анализируемым числом.
Итак, как выразить всю используемую грамматику, такую ​​как сложение, вычитание, умножение и деление, что привело к парадигме Бэкуса

Как показано выше, все этиРекурсивноВы можете выразить сложение, вычитание, умножение и деление. Итак, как можно применить парадигму Бэкуса на практике? Представляем bison, инструмент грамматического анализа

bison
скачать и установить

Обратите внимание, что файлы **. Y ** - это исходные файлы, обработанные bison.
Пример calc.y: этот файл реализует калькулятор, код выглядит следующим образом

обработка команд bison
1: bison -d calc.y -o calc.c // Используйте команду bison для вывода calc.y как calc.c
2: gcc -lm calc.c -o calc // Создание исполняемого файла с помощью gcc
3:./calc
4: 1 + 2 * 3, вывод 7
5: 1 + 2 * (3 + 4) вывод 15

Код слишком длинный для публикации. Расскажите, что делает этот зубр.
Он помогает нам преобразовать всю парадигму Бэкуса в различные конечные автоматы, а затем, когда мы вводим полиномиальное сложение или умножение, он передает его через рекурсию. Метод решается в число, и выполняется расчет, и результат выводится после расчета.

AST (абстрактное синтаксическое дерево)

AST

$ a = 1; После лексико-грамматического анализа мы можем сгенерировать следующий AST

Но AST по-прежнему не может быть запущен напрямую, и с ним нужно работать, чтобы генерировать соответствующие коды операций и выводить коды операций.

opcodes

Коды операций, связанные с структурой данных
структура zend_op: соответствует инструкции в сборке

znode_op - это еще один союз

структура zend_op_array: соответствует набору инструкций

Структура zend_execute_data: она работает на виртуальной машине zend

Дополнительные знания
При выполнении сборки на физической машине используются несколько концептуальных наборов инструкций, таблиц символов и стеков выполнения.

структура zend_vm_stack: стек выполнения

Компиляция AST

В процессе компиляции AST мы определим конкретную позицию каждого op1, op2, результата на виртуальной машине zend, zend_vm_stack, затем, после того, как AST прошел обход, вычисляются только op1, op2 и результат, и они должны пройти Важная функция passtwo, чтобы соответствовать обработчику и коду операции, таким образом завершая генерацию набора команд.

Виртуальная машина Zend

Что такое виртуальная машина Zend?
Ранее мы говорили о opline, зная, что есть обработчик, op1, op2, и результат в нем, механизм выполнения основан, например, на том, что глобальная переменная выполняет глобальную переменную для выборки каждой инструкции, а затем op1 , Op2 выполняет операции через обработчик, записывает его в результат и получает результат для последующего кода или нашего вывода.Это основной принцип виртуальной машины Zend.


Файлы, относящиеся к виртуальной машине
zend_vm_gen.php: время срабатывания флага, определение кода операции
zend_vm_execute.skl: это некоторые шаблоны обработчика, соответствующие коду операции
zend_vm_execute.h: определяет все обработчики кода операции (этот файл создается с помощью скрипта zend_vm_gen.php + шаблона zend_vm_execute.skl)

подводить итоги

Код php анализируется с помощью лексического анализа для создания абстрактного синтаксического дерева AST, которое компилируется в инструкции кодов операций через AST, а затем выполняется через виртуальную машину zend.

Читайте также: