Можете ли вы «скомпилировать» PHP-код?

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

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

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

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

кускус

  • GitHub (скачать), Википедия
  • компилируется в .NET (CIL)

ПМП

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

Компилятор PHP для Roadsend

  • GitHub , GitHub переписать
  • бесплатная реализация PHP с открытым исходным кодом с компилятором
  • компилируется в исходные двоичные файлы (Windows, Linux)
  • прекращено с 2010 года до тех пор, пока авторы не нашли – сайт вниз, остается на GitHub, где последнее изменение с начала 2012 года

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 году

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

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

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

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

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

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

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

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

Есть также

  • PHP (экспериментальное) расширение bcompiler ,

цель которой

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

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

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

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

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

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

Кто-нибудь слышал о Зенд Гварде , который делает именно то, что спрашивает этот человек. Он кодирует / обфускает код PHP в «машинный код».

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

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

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

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

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

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

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