Compilar Extensión "mssql.so" para PHP 4
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.
![]() |
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. |
![]() |
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...... |
![]() |
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 |



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