Установка php-spread на php 5.3
Есть такая замечательная штука spread. Она позволяет создать сервер сообщений, сообщения туда можно посылать и принимать. Для чего это нужно? Скажем есть у нас 100 демонов, которые читают данные из базы, база изменилась - надо ее перечитать. Демоны слушают сообщения, достаточно послать одно и все перечитают.
После пятничных движений на серверах spread-фичи перестали работать. Как показали логи - отвалился php-spread модуль, который реализует функционал отправки сообщений spread'у.
На вопрос как поставить спред гугл предлагает примерно такой путь:
apt-get php-dev phpize pecl
pecl install spread
PROFIT!!!
Но не прокатило. 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
@@ -17,7 +17,7 @@
| Rob Richards <[email protected]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_spread.c,v 1.54 2008/10/22 16:23:29 rrichards Exp $ */
+/* $Id$ */
#include "config.h"
@@ -45,7 +45,6 @@
static int le_conn;
/* {{{ arginfo */
-static
ZEND_BEGIN_ARG_INFO_EX(arginfo_spread_connect, 0, 0, 1)
ZEND_ARG_INFO(0, spread_daemon)
ZEND_ARG_INFO(0, private_name)
@@ -105,7 +104,7 @@
/* {{{ 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)
@@ -358,7 +357,7 @@
{
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);
@@ -423,7 +422,7 @@
mailbox *mbox = NULL;
char private_group[MAX_GROUP_NAME];
int rsrc_id;
- list_entry *le;
+ zend_rsrc_list_entry *le;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
@@ -867,7 +866,9 @@
if (Is_reg_memb_mess(stype)) {
/* join/leave/disconnect/network */
+#if (SPREAD_VERSION >> 24) >= 4
membership_info memb_info;
+#endif
char *changed_member;
add_assoc_long(return_value, "group_size", ngrps);
патч. Говорим phpize, ./configure, sudo make install. После этого надо добавить extension spread.so в php.ini и рестартануть апач.











