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

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

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

Ответ 1

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

Помимо этого, поиск в Google PHP compiler приводит к появлению ряда сторонних решений.

PeachPie

  • PeachPie GitHub
  • компилирует PHP в .NET и .NET Core
  • может быть скомпилирован в отдельный двоичный файл
  • работает на Mac, Linux, Windows, Windows Core, ARM,...

Phalanger

РНС

  • компилируется в собственные двоичные файлы
  • не очень активно (февраль 2014 г.) - последняя версия 2011 г., последние изменения летом 2013 г.

Roadsend PHP Compiler

bcompiler

  • PECL расширение PHP
  • экспериментальная
  • компилируется в байт-код PHP, но может обернуть его в двоичный файл Windows, который загружает интерпретатор PHP (см. bcompiler_write_exe_footer() руководство)
  • выглядит прекращено сейчас (февраль 2014) - последнее изменение в 2011 году

Project Zero

  • Википедия, IBM
  • инкубатор изменений для WebSphere sMash
  • поддерживается IBM
  • компилируется в байт-код Java
  • выглядит больше не поддерживается (февраль 2014 г.) - веб-сайт не работает, выглядит как большой ажиотаж в 2008 и 2009 гг.

Bambalam

  • компилируется в автономные двоичные файлы Windows
  • двоичные файлы содержат байт-код и модуль запуска
  • выглядит прекращено сейчас (февраль 2014) - последнее изменение в 2006 году

BinaryPHP

  • компилируется в C++
  • выглядит прекращено сейчас (февраль 2014) - последнее изменение в 2003

Ответ 2

Короткий ответ - "нет".

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

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

Ответ 3

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

http://github.com/facebook/hiphop-php/wiki

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

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

С 2013 года Facebook больше не использует его, и он был прекращен в пользу HHVM, который не является компилятором: https://en.wikipedia.org/wiki/HipHop_for_PHP

Ответ 4

Существует также

целью которого является

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

Мы используем Phalanger - http://www.php-compiler.net/ - поддерживаем даже эти грязные динамические функции PHP и все еще можем их скомпилировать. NET, которая может быть распространена как отдельная DLL.

Ответ 9

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

http://www.php.net/manual/en/opcache.installation.php

Ответ 10

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

Opcache не компилируется, а что-то подобное.

Ответ 11

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