PHP-код, скомпилированный с помощью bcompiler, не работает - PullRequest
1 голос
/ 28 июня 2010

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

Тампохоже, это класс, скомпилированный с помощью bcompiler 'class.viewimage.php' - он содержит сжатый код bz 'BZh91AY & SY; iu ...'

Затем существует обычный php-файл, который вызывает этот класс:

require('class.viewimage.php');
$my_image = NEW ViewImage ($MEDIALIB->Filestore);

Когда этот код запускается, он просто плюет текстовое содержимое скомпилированного класса в браузер ('BZh91AY & SY; iu ...').Это обязательная строка, которая вызывает это.Мне кажется, что php магически не знает, что это скомпилированный код.

Насколько я знаю, я установил Bcompiler в систему, так как этот код больше не падает (и он падал, когда ясначала сделал миграцию):

if (!extension_loaded('bcompiler')) {
    $prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
    dl($prefix . 'bcompiler.' . PHP_SHLIB_SUFFIX);
}

Любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 26 января 2011

Хотя у меня были свои проблемы с PHP bcompiler, использование include() или require() для доступа к скомпилированному коду (скомпилированному с использованием bcompiler_write_file()) на машине с установленным и включенным модулем bcompiler должно работать.

http://us2.php.net/manual/en/function.bcompiler-read.php:

Примечание:

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

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

Например, две мои (несовместимые) машины:

CentOS 5.5, PHP 5.2.10, Apache 2.2.3, x86_64
----
bcompiler version   0.9.3-devs
current bytecode version    0.21
can parse bytecode version  0.7, 0.9, 0.11, 0.12, 0.14, 
0.18, 0.21

Mac OS X 10.6, PHP 5.3.3, Apache 2.2.15, i386
----
bcompiler version   0.9.3-devs
current bytecode version    0.22
can parse bytecode version  0.20, 0.22

Я отправил его как ошибку в пакет PECL.

0 голосов
/ 26 апреля 2012

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

  1. Загрузите и установите Wampserver (любой выпуск).

  2. Скачать и установить Wampserver PHP Addons Версия php 5.2.5

  3. нажмите на Wampserver -> PHP -> Version -> 5.2.5 на панели задач (изменит вашу текущую версию php на 5.2.5).

  4. Выберите Wampserver -> PHP -> extension -> php_bcompiler (это активирует bcompiler на вашем компьютере).

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

  5. Загрузка GUI bcompiler .

  6. Выберите папку в графическом интерфейсе Bcompiler, и это скомпилирует весь ваш сайт одним щелчком мыши.

наслаждайтесь PHP | Наслаждайтесь открытым исходным кодом

0 голосов
/ 29 июня 2010

PHP рассматривает все требуемые / включаемые файлы как обычный текст и будет обрабатывать их как таковые, пока не обнаружит символ <? (короткий тег), <?php (обычный тег) или <% (тег ASP). последовательности в потоке, после чего он переключается в режим PHP, пока не достигнет конца скрипта или соответствующего закрывающего тега (?>, %>). Таким образом, нет способа заставить PHP обрабатывать скомпилированный ввод как программный код. Даже EVAL не поможет, так как он просто вызывает тот же парсер, который вначале не запускал двоичный вход.

Сам по себе BZipped код также не является исполняемым, если только он не обернут заглушкой для автоэкстрактора.

Поскольку он выглядит как BZipped, почему бы не попробовать разархивировать файл и посмотреть, что вы получите? Возможно, файл класса был загружен как дистрибутив .bz2 и просто переименован. Несжатая копия может содержать соответствующие оболочки для разрешения выполнения.

...