Compilar Extensión "mssql.so" para PHP 4


PHPExtendiendo el artículo que escribí anteriormente sobre como Compilar la Extensión "mssql.so" para PHP 5, esta vez trate de hacerlo en un PHP 4 más o menos con el mismo procedimiento, pero ahora en un servidor de producción con RedHat Enterprise 3, donde me encontré varios problemas que no me permitían realizar de forma correcta la compilación. Debido a lo anterior, documento en este artículo como logré compilar la extensión.

Después de terminar mi aplicación era necesario ejecutarla ya en un servidor de producción, sin embargo me tope con un RedHat con PHP 4.3.2, donde encontré algunos problemas, los cuales describo a continuación.

Primero me percate que existiera el paquete "php-dev" el cual en RedHat se llama "php-devel", el cual no me fue difícil encontrar para la versión en la que quería compilar. Lo siguiente fue descargar el RPM de las fuentes de PHP, que tampoco me dio ningún problema, salvo que la instalación del paquete me lo dejó en: "/usr/src/redhat/SOURCES/php-4.3.2.tar.bz2"

por lo que lo descomprimí con

$ tar xvfj php-4.3.2.tar.bz2

Como estamos tratando con PHP 4 y no con mi cómodo PHP 5 de mi máquina, hay que cambiar algunas cosas en las variables de shell. Hay que recordar que es necesario estar dentro de el directorio de la extensión y ejecutar lo siguiente:

export PHP_PREFIX="/usr"
$PHP_PREFIX/bin/phpize

Traté de seguir los mismos pasos que describo en mi Artículo anterior, sin embargo mi primer problema salió en el "configure" de PHP, donde me arrojó el siguiente error:

Cannot find FreeTDS in known installation directories

Por lo que se puede deducir de forma lógica que el problema esta en la instalación de FreeTDS. Por alguna causa los paquete precompilados no funcionaban, así que después de varios intentos fallidos me arme de valor y me baje las fuentes para compilarlo yo mismo siguiendo las indicaciones de la página de FreeTDS:

$ wget
http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
$ tar xvfz freetds-stable.tgz
$ cd freetds-0.64/
$ ./configure --prefix=/usr/local/freetds
$ make
# make install

Después de terminar la compilación e instalación traté de continuar con el "configure" de la extensión "mssql" sin embargo fue necesario cambiar la línea un poco, ya que es necesario indicarle a la extensión donde esta el FreeTDS para así continuar con el "make"

./configure --with-mssql=/usr/local/freetds/ --with-php-config=$PHP_PREFIX/bin/php-config
make

Para mi mala suerte, el "make" me dió las siguientes lineas de error.

In file included from /usr/include/openssl/ssl.h:179,
from /usr/include/php/main/php_network.h:78,
from /usr/include/php/ext/standard/fsock.h:38,
from /usr/include/php/ext/standard/php_standard.h:44,
from /usr/src/redhat/SOURCES/php-4.3.2/ext/mssql/php_mssql.c:31:
/usr/include/openssl/kssl.h:72:18: krb5.h: No such file or directory
In file included from /usr/include/openssl/ssl.h:179,
from /usr/include/php/main/php_network.h:78,
from /usr/include/php/ext/standard/fsock.h:38,
from /usr/include/php/ext/standard/php_standard.h:44,
from /usr/src/redhat/SOURCES/php-4.3.2/ext/mssql/php_mssql.c:31:
/usr/include/openssl/kssl.h:134: syntax error before "krb5_enctype"
/usr/include/openssl/kssl.h:136: syntax error before '*' token
/usr/include/openssl/kssl.h:137: syntax error before '}' token
/usr/include/openssl/kssl.h:149: syntax error before "kssl_ctx_setstring"
/usr/include/openssl/kssl.h:149: syntax error before '*' token
/usr/include/openssl/kssl.h:150: syntax error before '*' token
/usr/include/openssl/kssl.h:151: syntax error before '*' token
/usr/include/openssl/kssl.h:151: syntax error before '*' token
/usr/include/openssl/kssl.h:152: syntax error before '*' token
/usr/include/openssl/kssl.h:153: syntax error before "kssl_ctx_setprinc"
/usr/include/openssl/kssl.h:153: syntax error before '*' token
/usr/include/openssl/kssl.h:155: syntax error before "kssl_cget_tkt"
/usr/include/openssl/kssl.h:155: syntax error before '*' token
/usr/include/openssl/kssl.h:157: syntax error before "kssl_sget_tkt"
/usr/include/openssl/kssl.h:157: syntax error before '*' token
/usr/include/openssl/kssl.h:159: syntax error before "kssl_ctx_setkey"
/usr/include/openssl/kssl.h:159: syntax error before '*' token
/usr/include/openssl/kssl.h:161: syntax error before "context"
/usr/include/openssl/kssl.h:162: syntax error before "kssl_build_principal_2"
/usr/include/openssl/kssl.h:162: syntax error before "context"
/usr/include/openssl/kssl.h:165: syntax error before "kssl_validate_times"
/usr/include/openssl/kssl.h:165: syntax error before "atime"
/usr/include/openssl/kssl.h:167: syntax error before "kssl_check_authent"
/usr/include/openssl/kssl.h:167: syntax error before '*' token
/usr/include/openssl/kssl.h:169: syntax error before "enctype"
In file included from /usr/include/php/main/php_network.h:78,
from /usr/include/php/ext/standard/fsock.h:38,
from /usr/include/php/ext/standard/php_standard.h:44,
from /usr/src/redhat/SOURCES/php-4.3.2/ext/mssql/php_mssql.c:31:
/usr/include/openssl/ssl.h:909: syntax error before "KSSL_CTX"
/usr/include/openssl/ssl.h:931: syntax error before '}' token
make: *** [php_mssql.lo] Error 1

Despues de preguntarle a Google, no tardé en encontrar la solución.

export CPPFLAGS='-I/usr/kerberos/include/'
./configure --with-mssql=/usr/local/freetds/ --with-php-config=/usr/bin/php-config
make

Y listo, eso fue todo, compiló y ejecutó correctamente, aunque eso sí, en el transcurso de la compilación de la extensión "mssql" para PHP4 se dijeron muchas maldiciones.

Espero que este artículo sea de ayuda si te esta pasando lo mismo.



Imagen de Anónimo

puedes utilizar freetds, en un servidor apache montado sobre windows??
se puede utilizar consultas a base de datos sqlserver y mysql en una misma pagina php?
espero me ayudes gracias

Imagen de nexus
Hola

Sobre windows no es necesario usar el FreeTDS ya que los binarios de PHP ya cuentan con la extensión necesaria perfectamente compilada, por lo que no tendrás que hacer nada más.

Efectivamente puedes tener dos o mas acceso a bases de datos desde una misma aplicación, esto se puede lograr ya que las funciones que lo realizan son separados y no debes de tener ningún problema para hacerlo, de hecho yo tengo una aplicación que esta trabajando con MySQL y SQL Server de forma conjunta.
Imagen de matthi25

nexus, a mi no me funciona la extension de MSSQL, tengo mi apache con php en windows.... pero no logro conectarlo al mssql, hago un phpinfo(), pero hay no m muestra que tengo compilado la extension mssql..... Me podrias ayudar????

Gracias...

Saludos......

Imagen de nexus
Hola Matth.

Si estas trabajando con un PHP de Windows es sumamente facil, posiblemente tu pregunta sea contestada en este otro comentario.

En todo caso necesito más información sobre el problema que tienes, para poder determinar por donde va la cosa.

Saludos

Enviar un comentario nuevo

  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Saltos automáticos de líneas y de párrafos.
Más información sobre opciones de formato

Captcha Image: you will need to recognize the text in it.
Igrese las letras que puede ver en la imagen superior