Compilar extension mysqli para php

El otro día tuvimos que compilar la extensión mysqli para una versión de php instalada en un servidor. Esta version no era la nativa del servidor si no que era una versión 5.2.6 instalada junto con una versión php 5.4.

Para no tener que recompilar todo el php 5.2.6 decidimos compilar solo la extensión mysqli, para compilar solo la extensión seguimos estos pasos:

1. Entrar en el directorio donde teníamos ubicado el source del php 5.2.6, en nuestro caso en /usr/local/src/php-5.2.6
2. Entrar en el directorio de extensiones del código fuente (ext) y despues en el directorio de la extensión mysqli
3. Ejecutar phpize
4. Ejecutar el configure con el parámetro “–with-php-config” para especificar el php-confg de la versión php-5.2.6
5. Ejecutar make para que compile el mysqli.so y así copiarlo al directorio de las extensiones de vuestra versión del php.

Todo esto resumido seria:

cd /usr/local/src/php-5.2.6/ext/msqli
phpize
./configure --with-php-config=/usr/local/php526-cgi/bin/php-config
make

Una vez compilada la extensión tendréis un fichero llamado mysqli.so el cual debéis copiar al directorio de extensiones de vuestra instalación php. Si no conocéis cual es vuestro directorio los mas sencillo es colocar un phpinfo para mostrar esta información o bien ejecutar el ejecutable php de la versión con el parámetro “–info” para ver el valor del extension_dir

php --info|grep extension_dir

En mi caso todo esto dio como resultado un error al intentar realizar el make, el error es el siguiente:

/usr/local/php5262/php-5.2.6/ext/mysqli/mysqli.c:643:2: error: 'MYSQL_RPL_MASTER' undeclared (first use in this function)
/usr/local/php5262/php-5.2.6/ext/mysqli/mysqli.c:643:2: note: each undeclared identifier is reported only once for each function it appears in
/usr/local/php5262/php-5.2.6/ext/mysqli/mysqli.c:644:2: error: 'MYSQL_RPL_SLAVE' undeclared (first use in this function)
/usr/local/php5262/php-5.2.6/ext/mysqli/mysqli.c:645:2: error: 'MYSQL_RPL_ADMIN' undeclared (first use in this function)

Para solucionar este error tenemos que modificar el fichero mysql.h ubicado en /usr/include/mysql/mysql.h y añadir este código que os indico. Os copio también parte del código que contiene para que ubiquéis donde debéis añadirlo.

enum mysql_protocol_type to
{
MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
};
/* Codigo a añadir */
enum mysql_rpl_type to
{
MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN
};
/* Fin del codigo a añadir */
typedef struct character_set
{
unsigned int number; / * character set number * /
unsigned int state; / * character set state * /
const char * csname; / * collation name * /
const char * name; / * character set name * /

Una vez añadido este código veréis como el error os desparece y podéis compilar el modulo mysqli.

2 Comments

Leave a Comment.