Опубликовано пользователем Алексей

Понадобилось мне устроить общение между php и erlang. Из всех двух доступных вариантов я выбрал peb (PHP-Erlang-Bridge). Ниже я подробненько опишу процесс компиляции модуля для php 5.3.* и 5.4.*. В первую очередь для себя, чтобы при настройке на продакшене не тратить время на грабельки ;о)
Шаг 1. Подготовка
Скачиваем исходные коды по ссылке выше, распаковываем.
Если у Вас php 5.4.* посмотрите в конец статьи, там описано что нужно сделать прежде чем приступать к компиляции.
$ wget http://mypeb.googlecode.com/files/peb-0.20b.tar.gz
$ tar xzvf peb-0.20b.tar.gz
$ cd peb-*
Шаг 2. Установка.
Если не стоит erlang:
$ sudo yum install erlang
Без него дальнейший процесс бесполезен, так как нам нужна библиотека erl_interface
Далее находим где в дистрибутиве собственно находится эта самая библиотека. Можно сделать поиск по файлу ei.h
Например у меня в CentOS 6 x64 это /usr/lib64/erlang/lib/erl_interface-3.7.5/
$ phpize
Если команда не найдена, то $ sudo yum install php-devel
$ ./configure CC="gcc -L/usr/lib64/erlang/lib/erl_interface-3.7.5/lib/ -I/usr/lib64/erlang/lib/erl_interface-3.7.5/include/" --enable-peb
Указываем явно местонахождение библиотеки. Конфигуратор её не видит. Ваш путь может отличаться от моего, посему перепроверьте.
Далее всё просто. Если при конфигурировании было всё верно указано, то:
$ make
$ sudo make install
После получения сообщения о том, что модуль скомпилирован, идём в каталог /etc/php.d/ и сщздаём там файл peb.ini. В файле нужно указать extension=peb.so, чтобы наше расширение подхватилось php автоматически.
И последний шаг - рестарт httpd или php-fpm. Что у Вас настроено.
Но всё это касалось только установки на php 5.3.*
PHP 5.4.*
Для того, чтобы всё завелось на php 5.4.* необходимо провести сеанс шаманства с файлом peb.c
Строки 300-301:
list_entry * le ;
list_entry * newle;
заменить на:
zend_rsrc_list_entry * le ;
zend_rsrc_list_entry * newle;
Строка 371:
newle = pemalloc(sizeof(list_entry),persistent);
заменить на:
newle = pemalloc(sizeof(zend_rsrc_list_entry),persistent);
И строка 374:
zend_hash_update(&EG(persistent_list), key, key_len+1, newle,sizeof(list_entry), NULL );
заменить на:
zend_hash_update(&EG(persistent_list), key, key_len+1, newle,sizeof(zend_rsrc_list_entry), NULL );
А далее уже всё как для php 5.3.*