Установка и использование bcompiler’a на Debian Lenny

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

Во-первых, в репозитории (основном) пакета bcompiler, как ни странно, нет. Искать где-то пакеты от сторонних сборщиков, которые не прошли проверку в коммьюнити, для установки на боевой сервер мне было стремно. Пришлось по старинке собирать из исходников…

Использование bcompiler

Для тех кто впервые слышит слово bcompiler сделаю краткое отступление. Это такое специальное расширение к интерпретатору PHP, которое позволяет компилировать человеко-читаемые программы на языке PHP в машинно-читаемый байт-код. То есть на выходе после компиляции файла, к примеру, mycoolibrary.php получится mycoolibrary.phb. Этот новый файл можно использовать также как и неоткомпилированный (т.е инклюдить его в неоткомпилированные программы, вызывать из него функции, создавать экземпляры классов и т.д.). Но такой файл имеет следующие преимущества:

  • в дальнейшем может быть преобразован в настоящий исполняемый файл (PHP-GTK приложение - для этого будут нужны дополнительный софт, кроме самого bcompiler’а)
  • можно создавать библиотеки с закрытым исходным кодом
  • отдавать заказчикам триальные скрипты с ограниченным сроком работы (полезно будет фрилансерам - после того как заказчик полностью заплатит за скрипт можно будет отдавать полный исходник)
  • создавать приложения с полностью закрытым исходным кодом
  • ну и кроме всего прочего, экономится место на диске…

Установка bcompiler

  1. Устанавливаем зависимости командой aptitude install libbz2-dev automake m4 php5-dev re2c и устанавливаем само расширение: pecl install bcompiler-0.8. При этом в консоли будет что-то вроде этого:
    downloading bcompiler-0.8.tgz …
    Starting to download bcompiler-0.8.tgz (46,667 bytes)
    ………….done: 46,667 bytes
    10 source files, building
    running: phpize
    Configuring for:
    PHP Api Version: 20041225
    Zend Module Api No: 20060613
    Zend Extension Api No: 220060519
    building in /var/tmp/pear-build-root/bcompiler-0.8

    [...тут пропущен вывод команды ./configure - кому он интересен? :)...]

    Build process completed successfully
    Installing ‘/usr/lib/php5/20060613+lfs/bcompiler.so’
    install ok: channel://pear.php.net/bcompiler-0.8

  2. Настройка.

    Последние строки означают что расширение было успешно скомпилировано и установлено. Теперь идем в папку /etc/php5/cli/conf.d/ и создаем там файлик bcompiler.ini с одной-единственной строчкой extension=bcompiler.so. Кстати, для пользователей Debian Lenny - если у вас папка conf.d является симлинком на папку с общими конфигами php, то советую симлинк удалить и создать на его месте отдельную папку, которая поначалу будет содержать те же самые .ini что и остальные папки (apache2 и cgi). В дальнейшем это позволит держать разный набор расширений для разных режимов работы интерпретатора.

  3. Тестирование.

    Осталось проверить работу расширения на простом примере. Чтобы не отступать от традиции возьму обычную функцию helloWorld, которая будет объявлена в файле hello.php. Но мы представим что этот файл содержит очень важные функции, которые необходимо скрыть от глаз посторонних. :)

    Файл: hello.php
    function helloWorld() {
    echo “Hello, World\n”;
    }

    Второй файл, makefile.php, будет немного сложнее. Он выполняет задачу компиляции указанного исходного файла в байткод.

    //скомпилированный файл будет сохранен как coolibrary.phb
    $fh = fopen("coolibrary.phb", "w");
    bcompiler_write_header($fh);
    //исходный файл для компиляции
    bcompiler_write_file($fh, "hello.php");
    bcompiler_write_footer($fh);
    fclose($fh);
    ?>

    Для компиляции набираем в командной строке: /usr/bin/php makefile.php. Если компиляция прошла без ошибок, то будет создан файл coolibrary.php

    Последний этап проверки - вызываем функцию helloWorld() из обычного php-файла.

    //Внимание!!! Подключаем уже скомпилированный файл coolibrary.phb
    include (’coolibrary.phb’);

    //И, как ни в чем не бывало, вызываем функцию helloWorld!!!
    helloWorld();

Вот, кажется, все расписал. Если что-то не понятно в этой инструкции или не получается пишите в комменты.

Если вам понравился этот сайт, вы можете подписаться на rss

Отзывы: Комментариев нет

Ваш отзыв

Имя (*)

E-mail (*)

Сайт

Сообщение

Архивы

Реклама

службы мониторинга серверов