Я знаю, что PHP скомпилирован в байт-код перед его запуском на сервере, а затем этот байт-код может быть кэширован, так что весь сценарий не должен быть повторно интерпретирован при каждом веб-доступе.
Но можете ли вы «скомпилировать» код PHP и загрузить файл двоичного кода, который будет просто выполняться интерпретатором байт-кода?
Ответы:
После того, как этот вопрос был задан, Facebook запустил HipHop для PHP, который, вероятно, является самым проверенным PHP-компилятором на сегодняшний день (поскольку он работает на одном из 10 крупнейших сайтов мира). Однако Facebook прекратил его в пользу HHVM, который является виртуальной машиной, а не компилятором.
Помимо этого, поиск в Google
PHP compiler
приводит к появлению ряда сторонних решений.PeachPie
кускус
ПМП
Roadsend PHP Compiler
bcompiler
bcompiler_write_exe_footer()
руководство )Project Zero
Bambalam
BinaryPHP
источник
Короткий ответ - нет".
Текущая реализация PHP - это интерпретируемый язык. Вы можете поспорить с теоретическими аспектами того факта, что любой язык может быть технически интерпретирован или скомпилирован, но в его нынешнем виде такие реализации таковы, что для выполнения PHP-кода требуется интерпретатор, а интерпретатор управляет исполняющей средой.
Чтобы ответить на ваш вопрос о загрузке предварительно скомпилированного байт-кода PHP, это, возможно, возможно, но вам нужно было бы реализовать способ интерпретатора PHP для чтения в таком файле и работы с ним. С уже существующими кэшами кодов операций это не похоже на задачу, которая принесет много пользы.
источник
include
иrequire
? Например, если с PHP обычно включается скрипт,include( 'controller/' . $controller_name . '.php' )
будет ли он автоматически работать с HipHop? ураThe short answer is "no". The current implementation of PHP is that of an interpreted language. You can argue the theoretical aspects…
В этом нет ничего теоретического, во многих интерпретируемых языках есть компиляторы; а именно AutoIt / AutoHotkey, или даже еще до BASIC. Есть много программ, которые были написаны для них, а затем скомпилированы для публичного использования в качестве автономных программ. В PHP нет ничего особенного, чтобы предотвратить его компиляцию, поэтому существует множество компиляторов, но в отличие от AHK, нет официального, проверенного, компилятора - Zend Guard не совсем в счет.С тех пор, как вопрос был задан впервые, в этом ответе произошла смена ответа «нет» на «вид»
http://github.com/facebook/hiphop-php/wiki
Hip Hop for PHP был компилятором, который взял код PHP и превратил его в высоко оптимизированный C ++. Очевидно, некоторые функции не поддерживаются (например, «взорвать»)
Я нашел этот вопрос, ища больше информации о том, как реализовать HipHop, и подумал, что я буду говорить :)
Однако с 2013 года Facebook больше не использует его, и он был прекращен в пользу HHVM, который не является компилятором: https://en.wikipedia.org/wiki/HipHop_for_PHP
источник
pre-analyze
php-кода. В результате вы получаете файл двоичного кэша. С этим файлом и правильной конфигурацией HHVM можно запускать веб-страницу только с байт-кодом, больше не нужно исходных файлов;) <br> Я надеюсь, что все правильно.А также есть
которая направлена
Расширение доступно от PECL.
источник
phc позволяет вам компилировать PHP-программы в разделяемые библиотеки, которые можно загружать на сервер. Программа PHP скомпилирована в двоичные файлы. Это сделано таким образом, чтобы поддерживать
eval
s,include
s и всю стандартную библиотеку PHP.источник
Если вы просто ищете способ создания бинарного исполняемого файла из сценария PHP, пожалуйста, не пытайтесь сделать ваш вопрос чрезвычайно точным, потому что это покажет, что вы точно знаете, что вам нужно. Кроме того, большинство разработчиков PHP не имеют ни малейшего представления о том, что такое байт-код.
С учетом сказанного, ответы ДА . Я только что закончил компиляцию скрипта PHP в двоичный файл. И не просто двоичный. Я использовал приложение CDE (ссылка на Wayback Machine, исходная ссылка теперь не работает), чтобы превратить его в переносимый двоичный файл, который можно распространять со всеми зависимостями и выполнять без каких-либо проблем ... и он прекрасно работает.
Все, что вам нужно, это использовать phc .
источник
Хм, кто-нибудь слышал о Zend Guard , который делает именно то, что просит этот человек. Он кодирует / запутывает код 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 7 есть опция php ini opcache.file_cache, которая сохраняет байт-код в определенной папке. Это может быть полезно для сценария php cli, который «компилируется» и сохраняется в определенной папке для оптимизированного повторного использования.
Opcache это не компиляция, но что-то похожее.
источник
PHP на самом деле не компилируется, как во многих программах. Вы можете использовать кодировщик Zend, чтобы сделать его нечитаемым, хотя.
источник
Если вам разрешено запускать настоящие собственные двоичные файлы, то это ваш компилятор:
https://github.com/ircmaxell/php-compiler
Это PHP-компилятор, написанный на PHP!
Он компилирует код PHP в свой собственный код VM. Этот код виртуальной машины может быть либо интерпретирован его собственным интерпретатором (также написанным на PHP, не правда ли?), Либо он может быть переведен в битовый код. А с использованием инфраструктуры компилятора LLVM (
clang
и совместно) этот битовый код может быть скомпилирован в собственный двоичный файл для любой платформы, которую поддерживает LLVM (в значительной степени для любой платформы, которая имеет значение сегодня). Вы можете сделать это статически или каждый раз перед выполнением кода (стиль JIT). Таким образом, для работы этого компилятора требуется только два требования: установленный интерпретатор PHP и установленныйclang
компилятор.Если вам не разрешено запускать собственные двоичные файлы, вы можете использовать вышеупомянутый компилятор в качестве интерпретатора и позволить ему интерпретировать свой собственный код виртуальной машины, однако это будет медленным, поскольку вы запускаете интерпретатор PHP, который сам работает на движке PHP, поэтому у вас есть «двойная интерпретация».
источник
Существует также bcgen (порт b7 для PHP7):
https://github.com/vjardin/bcgen/
(Только PHP7.2)
источник