Введение

Внимание

Это расширение является ЭКСПЕРИМЕНТАЛЬНЫМ. Поведение этого расширения, включая имена его функций и любую другую относящуюся к нему документацию, может измениться в последующих версиях PHP без уведомления. Используйте это расширение на свой страх и риск.

Bcompiler был создан по следующим причинам:

  • Для кодирования всего скрипта PHP в проприетарное приложение
  • Для кодирования части кода PHP (некоторых функций/классов) для проприетарных приложений
  • Для производства приложений php-gtk, которые могут быть использованы непосредственно на клиентском рабочем месте, без необходимости установки на нем PHP.
  • Для изучения возможности создания конвертера из PHP в C
Первая из этих целей достигается с помощью функций bcompiler_write_header(), bcompiler_write_file() и bcompiler_write_footer(). Файлы с байткодом могут быть как обычными, так и сжатыми. Для использования сгенерированного байткода его достаточно подключить с помощью инструкций include и require.

Вторая достигается использованием функций bcompiler_write_header(), bcompiler_write_class(), bcompiler_write_footer(), bcompiler_read() и bcompiler_load(). Файлы с байткодом могут быть как обычными, так и сжатыми. bcompiler_load() читает сжатый алгоритмом bzip файл, который может ужиматься до 1/3 от оригинального размера.

Для создания исполняемых (EXE) файлов, bcompiler должен использоваться с модифицированным файлом sapi, либо с версией PHP, скомпилированным как разделяемая библиотека. В подобном сценарии, bcompiler будет читать байткод из конца исполняемого файла.

bcompiler может повысить производительность до 30% только если используется с несжатым байткодом. Но помните, что несжатый байткод может достигать размера в 5 раз большего, чем оригинальный код. Использование сжатия байткода позволит сэкономить место на диске, но сильно просадит производительность. Также, bcompiler не производит никакой оптимизации байткода, но, может быть, в будущем...

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