Компиляция php в байт код

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

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

Пожалуйста, не помечайте это ни hhvm, ни хип-хопом . HHVM не является неотъемлемой частью вопроса, просто возможный ответ. meta.stackexchange.com/a/149347/238706

@HalayemAnis Я думаю, что вы упомянули неправильную ссылку. Можете ли вы предоставить правильную ссылку для этого урока? или какие-нибудь последние обновления, ребята?

Этот вопрос на самом деле довольно расплывчатый. Вы можете «просто» создать компилятор PHP, который компилирует (в полном смысле) ваш исходный код и интерпретатор PHP в ELF, EXE или что-то еще.

11 ответов

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

Кроме того, googling PHP compiler включает несколько сторонних решений.

  • компилируется в исходные двоичные файлы
  • сейчас не очень активно (февраль 2014 года) — последняя версия в 2011 году, последнее изменение летом 2013 года.
  • GitHub, GitHub перезаписи
  • свободная реализация PHP с открытым исходным кодом с компилятором
  • компилируется в родные двоичные файлы (Windows, Linux)
  • прекращено с 2010 года до тех пор, пока авторы не нашли — сайт вниз, остается на GitHub, где последнее изменение с начала 2012 года.
  • Расширение PECL PHP
  • экспериментальная
  • компилируется в байт-код PHP, но может обернуть его в двоичный файл Windows, который загружает PHP-интерпретатор (см. bcompiler_write_exe_footer() manual)
  • выглядит прекращенным сейчас (февраль 2014 года) — последнее изменение в 2011 году
  • Wikipedia, IBM
  • инкубатор изменений для WebSphere sMash
  • поддерживается IBM
  • компилируется в байт-код Java
  • выглядит прекращенным сейчас (февраль 2014) — сайт вниз, выглядит как большой ажиотаж в 2008 и 2009 годах.
  • компилируется в автономные двоичные файлы Windows
  • двоичные файлы содержат байт-код и пусковую установку
  • теперь прекращено (февраль 2014) — последнее изменение в 2006 году
  • компилируется в С++
  • теперь прекращено (февраль 2014 года) — последнее изменение в 2003 году
Читайте также:  Меню с фоном html

А как насчет общего веб-хостинга? Могу ли я скомпилировать свой PHP-скрипт с помощью одного из этих компиляторов, а затем загрузить его на свой веб-хостинг на основе Linux?

@ sємsєм, это зависит от вашего хоста, но если бы мне пришлось угадывать, я бы сказал, что многие хосты не допустят этого.

Ни один из вышеперечисленных проектов, похоже, больше не поддерживается. Существует ли общепринятый компилятор за последние 2 года или почему все эти проекты игнорируются / заброшены?

Хороший список компиляторов PHP находится на thefreecountry.com. Все инструменты, упомянутые там, включены в этот ответ сейчас.

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

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

Часто бывает так, что вам нужен интерпретатор для правильного запуска программ PHP, но это не значит, что компилятор не может предоставить его в скомпилированном коде. phc (phpcompiler.org) обрабатывает все проблемы, которые вы описываете. Насколько мне известно, Roadsend (roadsend.com) тоже.

@FrankFarmer У вас был опыт работы с хип-хопом? Правильно ли работает HipHop с include и require ? Например, если PHP-скрипт обычно включается в include( ‘controller/’ . $controller_name . ‘.php’ ) будет ли это автоматически работать с HipHop? ура

Нет опыта. Быстрый взгляд на документы хип-хопа показывает, что это не сработает. github.com/facebook/hiphop-php/wiki/Running-HipHop

Читайте также:  Добавить фон через css

На самом деле вы можете скомпилировать код PHP, используя обычные PHP-компиляторы. Это зависит только от целевой платформы; Вы можете скомпилировать в код операции Zend, язык C или сборки .NET (используя Phalanger php-compiler.net )

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 не совсем в счет.

@FrankFarmer А теперь ваш ответ устарел: HipHop устарел, и Facebook больше его не использует (HHVM — это совсем другое, не компилятор, а виртуальная машина)

Источник

Компилятор PHP в байт код Си

Здравствуйте, Есть несколько вопросов, для любопытных цели вопросов описал ниже. 1) PHP полностью написан на Си? 2) В момент выполнения код php транслируется в Си, а потом компилится в байт код Си?? Или сразу компилится в байт код?? 3) Если верен первый результат, то логично что из PHP интерпретатора реально реализовать транслятор из php в Си, или нет?? 4) Если нет, то в любом случае можно же создать официальный компилятор на в основе движка самого интерпретатора? Цель моих вопросов в том, что хочу создать компилятор php -> Си -> байт код Си. И реализовать на fastCGI, но при этом сохранить мелкоразмерные файлы подобия движков CMS, для возможного редактирование «на ходу», в данном случае «на ходу» это быстрое редактирование, компилирование и заливка мелких файлов. Как мне сказали «тру-программеры» это повысит производительность не учитывая БД, -до коэффициента в 100 раз (СИшный байт-код). Плюсы: 1) С помощью компилятора «php -> Си -> байт код Си» можно будет писать программы на php, но получать производительность байт кода языка Си без интерпретации(причем он будет в памяти висеть в случае с fastCGI). 2) Оставляя мелкоразмерные файлы можно так же будет мгновенно отлаживать небольшие файлы и быстро компилировать и заливать на сайт без остановки его работы (на подобие как сейчас с php, только нужно будет компилировать еще). 3) Компилятор поможет сообщать о некоторых ошибках сразу при компиляции, а не на сайте (а на модуле можно и уронить апачь) 4) Программистам поможет внедрять в код триал версии программы и предоставлять разработчикам его ограничивая по времени и скрывая исходный код, не боясь что его «кинут». 5) Получать высокую производительность на небольших хостингах. Тут не мне говорить как трудно бывает собрать на дедик обычным сайтам, а тут можно будет держать большой ресурс при маленьких хостинг-затратах. 6) Для, хостеров будет выгодней держать больше пользователей с той же нагрузкой. Сами представьте когда на мощном сервере можно уместить еще в 10-30 раз больше пользователей (следовательно и прибыль в 10-30 раз). Единственный тормозящий ресурс тут будет база данных, но думаю можно будет реализовать кэш даже при динамичных изменениях (есть догадки). Основная теория возможного выигрыша в том, что при быстром выполнение кода он будет меньше тратить процессорное время, а значит это процессорное время можно будет тратить даже на ту же БД или на сторонни задачи — что и есть выигрыш. Жду вашего мнения, только скепсис и пессимизм просьба аргументировать.

Читайте также:  Gps android java координаты

Источник

Оцените статью