Установка php-spread на php 5.3
Есть такая замечательная штука spread. Она позволяет создать сервер сообщений, сообщения туда можно посылать и принимать. Для чего это нужно? Скажем есть у нас 100 демонов, которые читают данные из базы, база изменилась - надо ее перечитать. Демоны слушают сообщения, достаточно послать одно и все перечитают.
После пятничных движений на серверах spread-фичи перестали работать. Как показали логи - отвалился php-spread модуль, который реализует функционал отправки сообщений spread'у.
На вопрос как поставить спред гугл предлагает примерно такой путь:
apt-get php-dev phpize pecl
Но не прокатило. Spread вываливается с ошибкой компиляции.
Идем на http://pecl.php.net/package/spread и берем последнюю (от аж 2008 года версию спреда), разжимаем архив, применяем вот этот:
--- php_spread.c.orig 2011-05-24 08:26:40.000000000 +0000
+++ php_spread.c 2011-05-24 08:28:30.000000000 +0000
+----------------------------------------------------------------------+
-/* $Id: php_spread.c,v 1.54 2008/10/22 16:23:29 rrichards Exp $ */
ZEND_BEGIN_ARG_INFO_EX(arginfo_spread_connect, 0, 0, 1)
ZEND_ARG_INFO(0, spread_daemon)
ZEND_ARG_INFO(0, private_name)
/* {{{ spread_functions[] */
-function_entry spread_functions[] = {
+zend_function_entry spread_functions[] = {
PHP_FE(spread_connect, arginfo_spread_connect)
PHP_FE(spread_multicast, arginfo_spread_multicast)
PHP_FE(spread_disconnect, arginfo_spread_disconnect)
php_info_print_table_row(2, "Spread", "enabled");
php_info_print_table_row(2, "Version", PHP_SPREAD_VERSION);
- php_info_print_table_row(2, "CVS Id", "$Id: php_spread.c,v 1.54 2008/10/22 16:23:29 rrichards Exp $");
+ php_info_print_table_row(2, "CVS Id", "$Id$");
if (SP_version( &mver, &miver, &pver)) {
snprintf(sp_version, 128, "%d.%d.%d", mver, miver, pver);
php_info_print_table_row(2, "Spread version", sp_version);
char private_group[MAX_GROUP_NAME];
+ zend_rsrc_list_entry *le;
if (Is_reg_memb_mess(stype)) {
/* join/leave/disconnect/network */
+#if (SPREAD_VERSION >> 24) >= 4
membership_info memb_info;
add_assoc_long(return_value, "group_size", ngrps);
патч. Говорим phpize, ./configure, sudo make install. После этого надо добавить extension spread.so в php.ini и рестартануть апач.