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

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

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

11 ответов


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

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

Phalanger

phc

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

компилятор PHP Roadsend

bcompiler

  • расширение 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 годах

Bambalam

  • компилирует автономные двоичные файлы Windows
  • двоичные файлы содержат байт-код и пусковую установку
  • looks discontinued now (февраль 2014) – последнее изменение в 2006

BinaryPHP

  • компилируется в C++
  • looks discontinued now (февраль 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
  • для кодирования некоторых классов и / или функций в проприетарном приложении PHP
  • чтобы включить производство приложений php-gtk, которые могут быть использованы на клиентских рабочих столах, без необходимости php.исполняемый.
  • сделать технико-экономическое обоснование для конвертера PHP в C

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


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


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

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

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


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


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

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


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

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


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

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


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