Можете ли вы "скомпилировать" PHP-код?
Я знаю, что PHP компилируется в байтовый код до его запуска на сервере, а затем этот байтовый код может быть кэширован, так что весь скрипт не должен быть повторно интерпретирован с каждым веб-доступом.
но можете ли вы "скомпилировать" php и загрузить двоичный файл, который будет просто запускаться интерпретатором байтового кода?
11 ответов
после того, как этот вопрос был задан, 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 читать в таком файле и работать с ним. С существующими кэшами кода операции там уже, это не похоже на задачу, которая принесет много награды.
с тех пор, как вопрос был впервые задан, в этом ответе произошло изменение от категорического "нет" до "вида"
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 компилируется в бинарники. Это сделано таким образом, чтобы поддержать eval
s,include
s и вся стандартная библиотека 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 остаются нетронутыми.
в php 7 есть опция php ini opcache.file_cache это сохраняет байт-код в определенной папке. В может быть полезно в php cli-скрипте, которые "скомпилированы" и сохранены в определенной папке для оптимизированного повторного использования.
Opcache это не компиляция, но что-то подобное.
PHP на самом деле не компилируется, как со многими программами. Вы можете использовать кодировщик Zend, чтобы сделать его нечитаемым.